我有一個基類,並且從它派生的類很少。我沒有在基類中寫任何拷貝構造函數,它使用默認的構造函數。派生類中的拷貝構造函數
所以,如果我寫這樣的代碼:
base* b;
b = new base(*this)
它工作正常,但如果我寫的東西是這樣的:
base* b;
b = new derive(*this)
它讓我對沒有匹配功能的錯誤在派生類中。
無法將基類'this
指針指向其派生類複製構造函數以初始化它?
我有一個基類,並且從它派生的類很少。我沒有在基類中寫任何拷貝構造函數,它使用默認的構造函數。派生類中的拷貝構造函數
所以,如果我寫這樣的代碼:
base* b;
b = new base(*this)
它工作正常,但如果我寫的東西是這樣的:
base* b;
b = new derive(*this)
它讓我對沒有匹配功能的錯誤在派生類中。
無法將基類'this
指針指向其派生類複製構造函數以初始化它?
Derived
複製構造函數需要const Derived &
作爲它的參數。您不能使用const Base &
作爲參數。
你正在嘗試做的:
Derived *d = new Derived();
Base *b = new Base(*d); //ok, since Derived is subclass of Base
Base *b = new Based();
Derived *d = new Derived(*b); //error, since Base in not subclass of Derived
爲了構建Derived
從Base
您需要提供這樣的構造自己:
Derived(const Base &base) {...}
過載配版的衍生構造器,是以基地類作爲參數。這應該工作。
不,你不能。可能還有base
的其他子類。如果類derive
的複製構造函數接受const base&
,則可以將其傳遞給base
的另一個子類的實例。類derive
的拷貝構造函數不知道如何處理這樣的對象。
感謝您的回答安德魯,所以要構建Derived(const Base&base){...},我必須首先編寫一個基類複製構造函數?其實我嘗試添加派生類覆蓋版本,正如你所建議的,但現在它抱怨在基類中沒有匹配函數:( – Ruchi 2012-07-25 10:18:43
@Ruchi:如果默認的不夠用 - 是的,但不要忘記調用基礎拷貝構造函數派生初始值設定項列表 – Andrew 2012-07-25 10:20:15
好的,我寫了類似於派生派生::派生(const base&b),但它給了我錯誤:錯誤:沒有匹配的函數調用base :: base(),候選人是base :: base (const base&)和base :: base(some_arg),我不知道什麼是錯誤的,我的意思是爲什麼erive :: derive(const base&b)試圖調用base :: base()?? – Ruchi 2012-07-25 10:34:48