2011-11-16 68 views
1

請看下面的代碼,這是一個簡單的主題,但我不知道。如何用重載的構造函數創建兩個動態對象?

class trial{ 
public: 
    trial(){ 
     y = -1; 
    } 
    trial(int x){ 
     y = x; 
    } 
public: 
     int y; 
}; 


int main() { 
    trial *trialPtr = new trial();  // creates a dynamic object with empty constructor 
    trial *trialPtr1 = new trial(1); // creates a dynamic object with overloaded constructor 
    trial *trialPtr2 = new trial[2]; // creates two dynamic objects with empty constructor 
    return 0; 
} 

我的問題是,我如何創建兩個帶有重載構造函數的動態對象?

回答

2

陣列之前,請先閱讀評論是有問題的C++ 98/03,因爲你不能一般初始化它們完全自由。 C++ 11通過統一的初始化修復了這個問題。現在,你可以說,

new trial[2] { 1, 1 }; 
+0

+1感謝親的提示。 – djhaskin987

+0

阿這是不工作:( TEST.CPP:22:警告:僅可擴展初始化列表-std = C++ 0x或-std = GNU ++ 0x中
TEST.CPP:22:錯誤: ISO C++禁止在數組中初始化 test.cpp:22:錯誤:沒有匹配函數調用'trial :: trial(<括號內部初始化列表>)' –

+0

@CihadTurhan:正如我所說的,它是一個C++ 11使用GCC,在命令行中添加'-std = C++ 0x'(或GCC 4.7+中的'-std = C++ 11')。 –

3

This is not possible with an built in array

但是考慮使用一個std ::矢量

vector<trial> var(10, trail(4)); 

這有你不需要擔心內存管理

添加一個醜陋的解決方案的額外好處,因爲OP明顯想要它。在創建陣列之前將FOO設置爲適當的值。 downvoting

int FOO = -1; 

class trial{ 
public: 
    trial(){ 
     y = FOO; 
    } 
    trial(int x){ 
     y = x; 
    } 
public: 
     int y; 
}; 

int main(int argc, _TCHAR* argv[]) 
{ 
    FOO = 4; 
    trial *trialPtr2 = new trial[2]; 
    return 0; 
} 
+0

@parapura,謝謝你的快速回答。但是,對於我的項目,不允許使用任何內置的動態/靜態數組,我必須通過使用指針來完成。我們不能找到任何解決方案嗎? –

+0

+1我沒有想過這個,很好的電話。 – djhaskin987

+0

矢量總是一件好事,但傳統的矢量構造函數僅適用於複製現有範圍或填充具有相同值的所有內容。 C++ 11還允許您從括號列表中初始化矢量,並使用任意內容:'std :: vector v {「mom」,「jim」,「ezekiel」};'。 –

0

在C中要做到這一點沒有語法辦法++,如本(不正確)例如: 試用版* trialPtr2 =新trial2; 如果你想使用數組,你必須做一個「for」循環:

trial *trialPtr2[] = new (*trial)[2]; 
for (int i = 0; i < 2; i++) 
{ 
    trialPtr2[i] = new trial(3); 
} 
相關問題