现在我们来看看c++在构造函数时的构造顺序
代码如下:
#include <iostream>
class A
{
public:
A()
{
printf("创建A\n");
}
~A()
{
printf("销毁A\n");
system("pause");
}
};
class D
{
public:
D()
{
printf("创建D\n");
}
~D()
{
printf("销毁D\n");
}
};
class B
{
public:
B()
{
printf("创建B\n");
}
~B()
{
printf("销毁B\n");
}
};
class C : public A , public D
{
public:
C()
{
printf("创建C\n");
}
~C()
{
printf("销毁C\n");
}
private:
B b;
};
int main()
{
C c;
return 0;
}
运行结果如下:
可知,是先创建基类,再创建类中的类对象,再调用构造函数
析构时安装相反的方向,先析构类本身,再调用类中成员对象的析构函数,再调用基类的析构函数,当继承多个基类时,按照声明的顺序构造
在这个程序中表现为,构造顺序:A , D , B , C; 析构顺序: C B D A
验证一下,将A , D声明的顺序反一下:
...
class C : public D , public A
{
public:
C()
{
printf("创建C\n");
}
~C()
{
printf("销毁C\n");
}
private:
B b;
};
...
结果如下:
与我们的设想一样~~