我正在尝试在 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倍的:
- 为什么 C++ 会出现这种行为(在没有赋值的情况下,不能从另一个构造函数中调用构造函数)?
- 您如何创建多个构造函数签名,但又没有多余的重复代码做同样的事情?
原文由 WoodMath 发布,翻译遵循 CC BY-SA 4.0 许可协议
可以从另一个构造函数中调用构造函数。您只是忘记分配返回值。
对于问题 2,您需要 委托构造函数。