2009-11-24 93 views
1

我需要知道如何讓某些東西起作用。我有一個具有構造函數的類以及在初始化程序列表中初始化的一些常量。我想要的是能夠創建一個不同的構造函數,它需要一些額外的參數,但仍然使用初始化器列表。像這樣:使用初始化程序列表重載默認構造

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

完全可怕的例子,但它得到了重點。問題是,我如何得到這個工作?

回答

6

有一個構造函數沒有辦法委託給同一類的另一個構造函數。您可以將通用代碼重構爲靜態成員函數,但後者無法初始化字段,因此您必須在每個構造函數中重複字段初始值設定項。如果某個特定的字段初始值設定項具有計算該值的複雜表達式,則可以將其重構爲一個靜態成員函數,以便它可以在所有構造函數中重用。

這是一個已知的不便之處,委託給另一個構造函數的方法將在C++ 0x中提供。

0

你不能在C++ 03中這樣做,你必須重新輸入初始化列表。這將在C++ 0x中修復。巧合的是,語法正是你所擁有的,更巧合的是example on Wikipedia幾乎就是你的代碼。 :)