2012-07-21 70 views
0

我創建了一個簡單的類,它接受構造函數的參數,如下所示。爲類創建一個帶有參數的複製構造函數

class Jam 
{ 
    int age; 
    std::string name; 
    Jam *jam; 

    Jam(std::string argName) { 
      name = argName; 
    } 
}; 

它需要的參數並初始化Jamname到傳遞的參數。唯一的問題是,我希望能夠將Jam的另一個副本傳遞給構造函數,以便通過複製值來初始化其指向現有類的指針。通常在C++中,你可以指定Jam *jam = new Jam(existingJam);,它會默認複製,但由於我已經有std::string argName作爲參數,它拒絕讓我這樣做。

我閱讀了一篇文章here,它解釋瞭如何創建自己的拷貝構造函數,但它非常繁瑣,並且涉及單獨拷貝每個類成員,這對於具有10+數據成員的類來說似乎沒有多大意義。有沒有比單獨初始化每個成員更好的方法?

Jam::Jam(std::string argName, Jam *argJam) 
{ 
    age = argJam->age; 
    //etc... 
} 
+0

這不是一個複製構造函數,它有一個額外的字符串參數。 – 2012-07-21 12:14:19

+0

它死了如何拒絕讓你這樣做?問題是什麼? – juanchopanza 2012-07-21 12:31:45

回答

2

[它很可能我不明白你在問什麼,但在這裏不用...]

編譯器提供一個拷貝構造函數,如果你不寫一個自己。它的行爲是依次複製每個成員變量。

+0

這可能是也可能不是你想要的('Jam * jam;'看起來有點可疑) – 2012-07-21 12:15:39