我试图了解一个类的执行顺序,该类中嵌套了另一个类的对象。这是我的简单程序:
#include<iostream>
#include <string>
using namespace std;
class Alpha
{
int a;
public:
Alpha(int x)
{
a=x;
}
};
class Beta
{ int b;
public:
Beta(int y)
{
b=y;
}
};
class Gamma
{
Alpha A;
Beta B;
int c;
public:
Gamma(int a,int b, int d): A(a), B(b)
{
c=d;
}
};
void main()
{
Gamma g(5,6,7);
}
如您所见,Gamma 有 2 个嵌套对象。现在当 main() 的第一行被执行时,执行是如何在 Gamma 类中开始的?先调用构造函数还是先创建对象/数据成员?
最佳答案
构造函数执行顺序的问题很简单:首先,Gamma
构造函数启动,然后它立即进行初始化Alpha
和Beta
,如您的初始列表中指定的那样。完成初始化列表后,将执行 Gamma
的构造函数。
这里有一个重要的转折点:C++ 将按照嵌套对象在类中声明的顺序初始化嵌套对象,而不是按照它们在初始化列表中列出的顺序。换句话说,Alpha
将在 Beta
之前初始化,即使您反转 A(a)
和 B(b)
:
// The compiler will issue a warning for this
Gamma(int a,int b, int d): B(b), A(a)
{
c=d;
}
关于c++ - 嵌套类对象的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968295/