c++构造函数

C++ Constructor Oder

本文关键字:构造函数 c++      更新时间:2023-10-16

考虑以下代码:

#include<iostream>
using namespace std;
class cls
{
public:
        cls(int i=0) {cout<<" c1 ";}
        ~cls() {cout<<" d 1 ";}
};
class cls2
{
 cls xx;
public:
        cls1(int i=0){cout<<" c2 ";}
        ~cls1(){cout<<" d2 ";}
}c;
class cls3
{
    cls2 xx; cls xxx;
public:
    cls2(int i=0) {cout<<" c3 ";}
    ~cls2(){ cout<<" d3 ";}
};
int main()
{
    cls3 s;
    return 0;
}

现在,当我运行它,它输出:

c1 c2 c1 c2 c1 c3 d3 d1 d2 d1 d2 d1 d1 d1

,我不明白为什么,在我的脑海里,它应该输出:

c1 c2 c1 c3 d3 d1 d2 d1

因为:

cls2 s -> cls1 xx -> cls xx => c1
                           => c2
                -> cls xxx => c1
                => c3

我知道在某个地方,我的逻辑是错误的,但我不知道在哪里。

您在这里创建了一个额外的全局实例c:

class cls1
{
    int x; cls xx;
public:
        cls1(int i=0){cout<<" c2 ";x=i;}
        ~cls1(){cout<<" d2 ";}
} c; // <-- here

这个是先创建的