C语言编程专项训练:找错与备课第一章

3星 · 超过75%的资源 需积分: 3 15 下载量 26 浏览量 更新于2023-12-27 1 收藏 144KB DOC 举报
new int(a);}~base(){delete p;}};class deri:public base{int *q;public:deri(int a,int b):base(a){q=new int(b);}~deri(){delete q;}};int main(){base *pb;deri *pd;pd=new deri(1,2);pb=pd;delete pb;return 0;}”这是一道关于C++编程题目的训练题目。这道题目主要考察了对C++中类的继承、构造函数、析构函数以及指针的理解和运用能力。 首先,在这道题目中,定义了两个类base和deri,其中base类中有一个int类型指针p,并且定义了一个构造函数base(int a),在该构造函数中使用new关键字为p分配了内存空间,并将a的值赋给了指针p。同时,base类中还定义了一个析构函数~base(),在析构函数中使用delete关键字释放了指针p所指向的内存空间。另外,deri类继承自base类,并在其内部定义了一个int类型指针q,并且定义了一个构造函数deri(int a, int b),在该构造函数中调用了base类的构造函数base(a),并使用new关键字为指针q分配了内存空间,并将b的值赋给了指针q。同时,deri类中也定义了一个析构函数~deri(),在析构函数中使用delete关键字释放了指针q所指向的内存空间。 在main函数中,首先定义了一个base类指针pb和一个deri类指针pd,然后使用new关键字为pd分配了一个deri对象的内存空间。接着将pd赋值给了pb,然后使用delete关键字释放了pb所指向的内存空间。最后返回了0。 然而,这道题目中存在一个错误,即在base类的析构函数中应该使用delete[]关键字来释放p指向的内存空间,而不是delete关键字。由于在构造函数中使用了new[]关键字来为p分配内存空间,所以在析构函数中应该使用delete[]关键字来释放对应的内存空间。因此,正确的base类析构函数应该为~base(){delete[] p;}。这个错误在实际编程中可能会导致内存泄漏的问题,需要及时进行修正。 综上所述,这道C++编程题目主要考察了对类的继承、构造函数、析构函数以及指针的理解和运用能力。通过对题目的分析和总结,我们可以更加深入地理解C++语言中类的相关知识点,同时也能够注意到在实际编程中需要注意内存管理的问题。希望大家能够通过这样的题目训练加深对C++编程的理解和应用能力,提升自己的编程水平。