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++ 中这样做?

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

时间:原作者:0个回答

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) {}
};
原作者:
...