c++ - 嵌套类对象的工作?

标签 c++ oop object

我试图了解一个类的执行顺序,该类中嵌套了另一个类的对象。这是我的简单程序:

#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构造函数启动,然后它立即进行初始化AlphaBeta,如您的初始列表中指定的那样。完成初始化列表后,将执行 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/

相关文章:

无符号字符串类型的 C++ 正则表达式

c# - 返回该方法接受的相同对象有什么问题吗?

java - 我将如何创建一个使用 String 类型行为进行创建的对象?

javascript - 使用 lodash 在 javascript 中查找两组数据之间的匹配

java - 为什么一个对象在线程中初始化并从 main 访问时有时为 null?

c++ - 在计算密集型程序中正确使用流

c++ - 将字符串函数复制到非 const char 缓冲区

c++ - 如何处理模板化代码中的变量const?

java - 如何在骨架实现(即类)中实现一个接口(interface),该接口(interface)的两个实例可以相互依赖,而无需向下转型?

mysql - 如何将导航下拉菜单表示为 Java 对象(对于 JPA)