<分区>
我正在尝试用 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
。
然而,当从 Foo(int)
构造函数中调用 Foo(void)
构造函数时,Foo::iX
保持等于 1
仅在该构造函数中。一旦退出该方法,它就会恢复为 2
。
所以我的问题有两个:
- 为什么 C++ 会这样(一个构造函数不能在没有分配值的情况下从另一个构造函数中调用)?
- 如何创建多个构造函数签名,但又没有冗余的重复代码来做同样的事情?