c++ - 在 C++ 中,我可以从另一个构造函数( 执行构造函数链接) 调用构造函数?

  显示原文与译文双语对照的内容
53 3

作为一个 C# 插件开发人员,我习惯于通过构造函数运行:


class Test {


 public Test() {


 DoSomething();


 }



 public Test(int count) : this() {


 DoSomethingWithCount(count);


 }



 public Test(int count, string name) : this(count) {


 DoSomethingWithName(name);


 }


}



有办法在 C++ 中这样做?

我尝试调用类名并使用'这个'关键字,但两者都失败了。

时间: 原作者:

136 5

C++11: 是

C++11和onwards具有相同的功能( 调用委托构造函数。) 。

语法与 C# 略有不同:


class Foo {


public: 


 Foo(char x, int y) {}


 Foo(int y) : Foo('a', y) {}


};



C++03: 无

不幸的是,在C++03中没有这样做,但是有两种方法可以模拟这一点:

可以通过默认参数组合两个( 或者更多) 构造函数:


class Foo {


 public:


 Foo(char x, int y=0);//combines two constructors (char) and (char, int)


. . .


 };



使用init方法共享公共代码:


class Foo {


 public:


 Foo(char x);


 Foo(char x, int y);


. . .


 private:


 void init(char x, int y);


 };



 Foo::Foo(char x)


 {


 init(x, int(x) + 7);


. . .


 }



 Foo::Foo(char x, int y)


 {


 init(x, y);


. . .


 }



 void Foo::init(char x, int y)


 {


. . .


 }



请参见的C++FAQ条目参考。

原作者:
150 0

不,你不能从 C++03 ( 。称为委托构造函数) 中的另一个构造函数调用一个构造函数。

在 C++11 ( aka C++0x ) 中更改,它增加了对以下语法的支持:
( 取自维基百科的例子)


class SomeType


{


 int number;



public:


 SomeType(int newNumber) : number(newNumber) {}


 SomeType() : SomeType(42) {}


};



原作者:
...