4
如果我們假設我們有類此層次:一個< - B < - C.我有以下問題:默認的拷貝構造函數和複雜的繼承層次
1)如果我實現了在B中的拷貝構造函數,我必須在B的實現中調用A的拷貝構造函數嗎?
2)C的默認拷貝構造函數會調用我在B中實現的拷貝構造函數嗎?
如果我們假設我們有類此層次:一個< - B < - C.我有以下問題:默認的拷貝構造函數和複雜的繼承層次
1)如果我實現了在B中的拷貝構造函數,我必須在B的實現中調用A的拷貝構造函數嗎?
2)C的默認拷貝構造函數會調用我在B中實現的拷貝構造函數嗎?
不是必須的,但它是很好的做法。它不會被自動調用。你也可以調用其他的構造函數(或者沒有,在這種情況下默認的構造函數被調用)並且做你想做的任何事情,儘管調用基本拷貝構造函數是習慣的。
是的,它會的。
非常感謝您的回答。這很清楚。 – benlaug 2011-12-17 23:54:07
正確的答案無疑會在我寫這篇評論時慢慢流入。不過,我覺得我需要指出(運行時)多態性和複製語義通常不適合,或根本不適合。 – sbi 2011-12-17 23:10:19
¤重新(1),是的,如果你想執行它,你必須調用它。否則,由於您正在定義B副本構造函數,因此它將自動調用A默認構造函數,或者如果該調用不明確,則不會編譯它。 Re(2),默認拷貝構造函數是否會調用你已經在直接基類B中實現的拷貝構造函數,是/如果編譯器能夠生成默認拷貝構造函數(即在問題有意義的情況下)。但請注意,例如'T(T&)'也是正式的複製構造函數...... Cheers&hth。, – 2011-12-17 23:15:15