【问题标题】:C++ Constructor Oder [closed]C ++构造函数Oder [关闭]
【发布时间】: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 打印 c3cls1 打印 c2 令人困惑。
  • 您能否让演示文稿不那么迟钝和莫名其妙?
  • x 成员或构造函数参数是否有关联?
  • @tobi303,我稍微编辑了一下,希望现在更好

标签: c++ class oop constructor


【解决方案1】:

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

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

首先创建那个。

否则,您的预期订单是正确的。

【讨论】:

  • 对,我没注意到c,谢谢指出。
  • 顺便说一句,以这种方式声明变量在 C++ 中非常晦涩难懂。我认为我从未见过任何生产/专业代码以这种方式声明变量(在类定义之后)。
猜你喜欢
  • 2013-08-26
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多