How to call a C++ class Constructor from another Constructor
本问题已经有最佳答案,请猛点这里访问。
我试图在C++中创建一个需要多个对象构造函数的对象。比如说
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #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; } |
其输出为
1 2 3 4 | setX(void) Method : Foo::iX = 2 Foo(int) Constructor : Foo::iX = 2 Foo(void) Constructor : Foo::iX = 1 Foo(int) Constructor : Foo::iX = 2 |
结果表明,
但是,当从
所以我的问题是两方面的:
型
您可以使用委托构造函数(因为C++ 11)如下:
1 2 3 | Foo(int iX) : Foo() { // ... }; |
号
请注意,在这里,
避免重复代码的另一种方法是使用
1 2 3 4 5 6 7 8 | Foo() { setX(1); // ... }; Foo(int iX) { setX(iX); // ... }; |
型
如果您能够使用C++ 11编译器,则可以使用委托构造函数。
1 2 | // Use Foo(int) to initialize the object when default constructor is used. Foo() : Foo(1) {} |
型
可以从另一个构造函数中调用构造函数。您只需忘记分配返回值。
1 | *this = Foo::Foo(); |
。
对于问题2,需要委托构造函数。
1 2 3 | Foo(int iX) : Foo() { ... } |