问题:
设已经有A, B, C, D 4个类的界说,步伐中A, B, C, D构造函数调用顺序为?()
设已经有A, B, C, D 4个类的界说,步伐中A, B, C, D析构函数调用顺序为?()
A:D B A C
B:B A D C
C:C D B A
D:A B D C
E:C A B D
F:C D A B
C c;
int main()
{
A a;
B b;
static D d;
return 0;
}
复制代码
解析:
构造顺序:C D A B
1、局部变量(非静态)构造顺序:按照界说的先后顺序举行构造。在代码中,先界说了 A a,然后是 B b,以是 A 类的构造函数会先于 B 类的构造函数被调用。
2、静态局部变量构造顺序:静态局部变量的初始化(也就是其构造函数调用)是在步伐实验第一次进入包罗它的函数(这里是 main 函数)之前就完成的。以是 static D d 的构造函数会在 A 和 B 类的局部变量构造之前就被调用,因为它属于静态存储类型,需要更早地初始化准备好内存等相关资源。
3、整体顺序:综合来看,构造函数的调用顺序先是 D(因为 d 是静态局部变量,优先初始化),然后是 A(a 的界说在前),接着是 B(b 的界说在 A 变量界说之后)。而代码中界说的 C c 是一个全局变量 ,全局变量的构造函数调用机遇是在 main 函数实验之前,并且是在全部静态存储类型的局部变量初始化之前,以是 C 类的构造函数调用是最早的。
析构顺序:B A D C
析构顺序和构造顺序是相反的;
遵循的原则是:后构造的对象先析构
4、友元