楼下的哥们说错了
析构函数和构造函数调用的次数不一定是一样的
虚拟析构函数在里面有很大的因素
大家可以参考我的代码
里面有详细解答哦
不懂可以接着追问
错误的地方可以提出来
#include <iostream>
using namespace std;
class CA
{
//int m_iX;
public:
int pA;
CA()
{
pA = new int[100];
cout<<"CA内存被分布,构造函数被调用"<<endl;
}
//CA(int x)
// {
// m_iX = x;
// pA = new int[100];
// //m_iX = 20;
// cout<<m_iX<<endl;
// cout<<"内存被分布,带参数的构造函数被调用"<<endl;
// }
//CA pB = new CA;
//虚析构函数的作用是,当父类指针指向子类对象的时候,DELETE父类指针,
//那么子类的析构函数将会被调用,否则只调用父类自己的析构函数
virtual ~CA()
{
delete []pA;
cout<<"父类CA的析构函数被调用,释放掉了pA的空间"<<endl;
}
////必须通过指针来实现
//虚拟函数的作用是,当有virtural的情况下,当用类的对象来调用print函数的时候,如果子类也有print函数的情况下,
//C++会首先调用子类的print函数,如果子类没有print函数,则会则会调用自己父类的print函数。
//如果没有virtural,则也会调用父类的virtural函数,反之,则调用子类的print函数。
//参考函数多态 /////////////////////多态就是通过父类的指针调用某个子类的函数,从而实现同一个函数有不同执行的结果
//在使用多态的时候,如果子类有这个函数就调用子类的,如果子类没有就调用父类自己的
virtual void print()
{
cout<<"调用CA的print函数"<<endl;
}
};
class CB:public CA
{
public:
int pB;
CB()
{
pB = new int[100];
cout<<"父类CA的构造函数被调用"<<endl;
}
//CB(int x):CA(10)
//{
// pB = new int[100];
// cout<<x<<endl;
// cout<<"CB的构造函数被调用"<<endl;
//}/
~CB()
{
delete []pB;
cout<<"子类CB的析构函数被调用,释放掉了pB的空间"<<endl;
}
void print()
{
cout<<"子类CB的print函数被调用"<<endl;
}
};
void main()
{
CA pa = new CB;
pa->print();
delete pa;
//CB a;
//CB b(100);
// CA c = CA(100);
// CA a;
// CA pA = new CA;
// delete pA;
}
已知X类则当程序执行到语句Xarray[3];时,调用了()次构造函数
A0
B1
C2
D3
正确答案:3
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)