如何从另一个构造函数调用 C 类构造函数

新手上路,请多包涵

我正在尝试在 C++ 中创建一个需要多个对象构造函数的对象。说 Foo()Foo(int) 其中 Foo(int) 然后调用 Foo() 。简化代码如下:

 #include <iostream>
class Foo{

private:
        int iX;

public:
        void printX(string sLabel){
            cout << sLabel << " : " << " Foo::iX = " << Foo::iX << endl;
        };
        void setX(int iX){
            Foo::iX = iX;
            Foo::printX("setX(void) Method");
        };
        Foo(){
            Foo::iX = 1;
            Foo::printX("Foo(void) Constructor");
        };
        Foo(int iX){
            Foo::setX(iX);
            Foo::printX("Foo(int) Constructor");
            Foo::Foo();
            Foo::printX("Foo(int) Constructor");

        };
};

int main( int argc, char** argv ){

    Foo bar(2);

    return 0;
}

其中的输出是

setX(void) Method :  Foo::iX = 2
Foo(int) Constructor :  Foo::iX = 2
Foo(void) Constructor :  Foo::iX = 1
Foo(int) Constructor :  Foo::iX = 2

结果表明 setX 方法按预期工作。 Foo::iX 等于 2 在该函数的范围内外。

However when calling the Foo(void) constructor from within the Foo(int) constructor, Foo::iX stays equal to 1 only within that constructor.一旦退出该方法,它就会恢复为 2

所以我的问题是2倍的:

  1. 为什么 C++ 会出现这种行为(在没有赋值的情况下,不能从另一个构造函数中调用构造函数)?
  2. 您如何创建多个构造函数签名,但又没有多余的重复代码做同样的事情?

原文由 WoodMath 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 563
1 个回答

可以从另一个构造函数中调用构造函数。您只是忘记分配返回值。

 *this = Foo::Foo();

对于问题 2,您需要 委托构造函数

 Foo(int iX) : Foo() {
    ...
}

原文由 Wiki Wang 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题