早教吧作业答案频道 -->其他-->
分析构造函数和析构函数调用次序(1)类A是类B的基类,类B是类D的基类,类C是类B的对象成员,若定义类D的对象,分析各类的构造函数和析构函数的调用次序。(2)对于(1)的题,假设C类也从
题目详情
分析构造函数和析构函数调用次序
(1)类A是类B的基类,类B是类D的基类,类C是类B的对象成员,若定义类D的对象,分析各类的构造函数和析构函数的调用次序。
(2)对于(1)的题,假设C类也从类A派生,即类A同为B和C的基类,其余题意同上,分析定义类D的对象是,各类的构造函数和析构函数的调用次序。
(3)对于(2)题 ,假设类B和类C都虚拟继承于类A,分析定义类D的对象是,各类的构造函数和析构函数的调用次序。
(1)类A是类B的基类,类B是类D的基类,类C是类B的对象成员,若定义类D的对象,分析各类的构造函数和析构函数的调用次序。
(2)对于(1)的题,假设C类也从类A派生,即类A同为B和C的基类,其余题意同上,分析定义类D的对象是,各类的构造函数和析构函数的调用次序。
(3)对于(2)题 ,假设类B和类C都虚拟继承于类A,分析定义类D的对象是,各类的构造函数和析构函数的调用次序。
▼优质解答
答案和解析
(1)
#include
using namespace std;
class A
{
public:
A()
{
cout <}
~A()
{
cout <}
};
class C
{
public:
C()
{
cout <}
~C()
{
cout <}
};
class B:public A
{
public:
C c;
B()
{
cout <}
~B()
{
cout <}
};
class D: public B
{
public:
D(){
cout <}
~D(){
cout <}
};
int main()
{
D d;
return 0;
}
输出:
constructing A
constructing C
constructing B
constructing D
Destructing D
Destructing B
Destructing C
Destructing A
(2)
#include
using namespace std;
class A
{
public:
A()
{
cout <}
~A()
{
cout <}
};
class C:public A
{
public:
C()
{
cout <}
~C()
{
cout <}
};
class B:public A
{
public:
C c;
B()
{
cout <}
~B()
{
cout <}
};
class D: public B
{
public:
D(){
cout <}
~D(){
cout <}
};
输出:
constructing A
constructing A
constructing C
constructing B
constructing D
Destructing D
Destructing B
Destructing C
Destructing A
Destructing A
(3)
#include
using namespace std;
class A
{
public:
A()
{
cout <}
~A()
{
cout <}
};
class C:virtual public A
{
public:
C()
{
cout <}
~C()
{
cout <}
};
class B:virtual public A
{
public:
C c;
B()
{
cout <}
~B()
{
cout <}
};
class D: public B
{
public:
D(){
cout <}
~D(){
cout <}
};
输出:
constructing A
constructing A
constructing C
constructing B
constructing D
Destructing D
Destructing B
Destructing C
Destructing A
Destructing A
#include
using namespace std;
class A
{
public:
A()
{
cout <}
~A()
{
cout <}
};
class C
{
public:
C()
{
cout <}
~C()
{
cout <}
};
class B:public A
{
public:
C c;
B()
{
cout <}
~B()
{
cout <}
};
class D: public B
{
public:
D(){
cout <}
~D(){
cout <}
};
int main()
{
D d;
return 0;
}
输出:
constructing A
constructing C
constructing B
constructing D
Destructing D
Destructing B
Destructing C
Destructing A
(2)
#include
using namespace std;
class A
{
public:
A()
{
cout <}
~A()
{
cout <}
};
class C:public A
{
public:
C()
{
cout <}
~C()
{
cout <}
};
class B:public A
{
public:
C c;
B()
{
cout <}
~B()
{
cout <}
};
class D: public B
{
public:
D(){
cout <}
~D(){
cout <}
};
输出:
constructing A
constructing A
constructing C
constructing B
constructing D
Destructing D
Destructing B
Destructing C
Destructing A
Destructing A
(3)
#include
using namespace std;
class A
{
public:
A()
{
cout <}
~A()
{
cout <}
};
class C:virtual public A
{
public:
C()
{
cout <}
~C()
{
cout <}
};
class B:virtual public A
{
public:
C c;
B()
{
cout <}
~B()
{
cout <}
};
class D: public B
{
public:
D(){
cout <}
~D(){
cout <}
};
输出:
constructing A
constructing A
constructing C
constructing B
constructing D
Destructing D
Destructing B
Destructing C
Destructing A
Destructing A
看了 分析构造函数和析构函数调用次...的网友还看了以下:
普通旅客列车的车次序号( )。A.以T开头 B.以L开头 C.以K开头 D.均为4位数 2020-05-19 …
普通旅游列车和慢车的车次序号均为__________位数,旅游列车,车次前冠以__________。 2020-05-20 …
普通旅客列车的车次序号( )。A.以T开头B.以L开头C.以K开头D.均为4位数 2020-05-20 …
可以将一个堆序列看成是一棵完全二叉树结点的层次序列,下面关键序列()就是一个堆。A.5,72,23, 2020-05-23 …
athirdtime指再次,又一次,不表示顺序.thethirdtime第三次,强调顺序.因为at 2020-06-08 …
在鸽子中,有一伴性的复等位基因系列(鸽子是ZW型性别决定方式,基因在Z染色体上),包括BA(灰红色 2020-06-18 …
有向图的广度优先遍历次序,0E21∧1D034∧2C4∧3B120∧4A2∧这个是有向图的一个邻接 2020-07-09 …
一道看意思写成语六年级题1.雕一件东西,一直刻下去不放手.比喻有恒心,有毅力()2象游鱼一样一个接 2020-07-24 …
5卷本百科全书按从第1卷到第5卷的递增序号排列,今要将它们变为反序排列,即从第5卷到第1卷.如果每 2020-07-27 …
《中国共产党八十年的奋斗业绩和基本经验》作者先谈奋斗业绩,后谈基本经验,这两个部分是如何连接在一起的 2020-12-16 …