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

问题描述:

我需要知道如何让某些东西起作用。我有一个具有构造函数的类以及在初始化程序列表中初始化的一些常量。我想要的是能够创建一个不同的构造函数,它需要一些额外的参数,但仍然使用初始化器列表。像这样:使用初始化程序列表重载默认构造

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

完全可怕的例子,但它得到了重点。问题是,我如何得到这个工作?

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

这是一个已知的不便之处,委托给另一个构造函数的方法将在C++ 0x中提供。

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