构造函数,析构函数被调用了几次

构造函数,析构函数被调用了几次,第1张

楼下的哥们说错了

析构函数和构造函数调用的次数不一定是一样的

虚拟析构函数在里面有很大的因素

大家可以参考我的代码

里面有详细解答哦

不懂可以接着追问

错误的地方可以提出来

#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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12177966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存