C ++构造函数Oder [关闭]
Posted
技术标签:
【中文标题】C ++构造函数Oder [关闭]【英文标题】:C++ Constructor Oder [closed] 【发布时间】: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,我稍微编辑了一下,希望现在更好
【参考方案1】:
您正在这里创建一个额外的全局实例c
:
class cls1
int x; cls xx;
public:
cls1(int i=0)cout<<" c2 ";x=i;
~cls1()cout<<" d2 ";
c; // <-- here
首先创建那个。
否则,您的预期订单是正确的。
【讨论】:
对,我没注意到c,谢谢指出。 顺便说一句,以这种方式声明变量在 C++ 中非常晦涩难懂。我认为我从未见过任何生产/专业代码以这种方式声明变量(在类定义之后)。以上是关于C ++构造函数Oder [关闭]的主要内容,如果未能解决你的问题,请参考以下文章