使用初始化列表重载默认构造

时间:2009-11-24 23:07:35

标签: c++ initialization overloading default-constructor

我需要知道如何让事情发挥作用。我有一个带有构造函数的类,并在初始化列表中初始化了一些常量。我想要的是能够创建一个不同的构造函数,它需要一些额外的参数,但仍然使用初始化列表。像这样:

class TestClass
{
    const int cVal;
    int newX;
    TestClass(int x) : cVal(10)
    { newX = x + 1; }
    TestClass(int i, int j) : TestClass(i)
    { newX += j; }
}

完全可怕的例子,但它得到了重点。问题是,我该如何让它发挥作用?

2 个答案:

答案 0 :(得分:6)

一个构造函数无法委托给同一个类的另一个构造函数。您可以将公共代码重构为静态成员函数,但后者无法初始化字段,因此您必须在每个构造函数中重复字段初始化程序。如果特定字段初始值设定项具有计算值的复杂表达式,则可以将其重构为静态成员函数,以便可以在所有构造函数中重用它。

这是一个众所周知的不便,并且将在C ++ 0x中提供委托给另一个构造函数的方法。

答案 1 :(得分:0)

你不能在C ++ 03中这样做,你必须重新输入初始化列表。这将在C ++ 0x中修复。巧合的是,语法正是你所拥有的,更巧合的是example on Wikipedia几乎是你的代码。 :)