【发布时间】:2016-08-30 13:55:36
【问题描述】:
考虑以下代码:
#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
我似乎无法弄清楚为什么在我的脑海中,它应该输出:
c1 c2 c1 c3 d3 d1 d2 d1
因为:
cls2 s -> cls1 xx -> cls xx => c1
=> c2
-> cls xxx => c1
=> c3
我知道在某个地方,我的逻辑有缺陷,但我不知道在哪里。
【问题讨论】:
-
请使用一致的名称和值! cls1 应该打印 c1 和 d1。
-
不确定您的逻辑,但您的命名约定有缺陷。我发现
cls2打印c3而cls1打印c2令人困惑。 -
您能否让演示文稿不那么迟钝和莫名其妙?
-
x成员或构造函数参数是否有关联? -
@tobi303,我稍微编辑了一下,希望现在更好
标签: c++ class oop constructor