2014-04-04 120 views
1

我想知道如何從派生類中使用複製構造函數和賦值運算符。似乎關於這個問題的所有其他問題都涉及基類也有一個它自己的賦值運算符,而我的基類是不允許的。在問題從派生類中創建複製構造函數和賦值運算符

成員函數是:

SpecialOrder &運算符=(常數SPecialOrder &源)

+0

在你進一步咆哮這個錯誤的樹之前,我會建議閱讀[copy/swap idiom](http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom ),因爲它具有來自設計缺陷的無效期望的獨特香氣。 – WhozCraig

回答

1

你將需要處理複製基類成員的一種方式或另一種。

標準方法是在派生類中調用基類賦值運算符,例如, Order::operator=(source);Order::Order(source);不正確,實際上你的編譯器應該已經告訴過你了,你不能在已經創建的對象上調用構造函數)。

您的其他選擇是使用基類的public/protected方法來嘗試和設置狀態,但是如果您不能訪問基類賦值運算符或複製構造函數,或者它們沒有被定義/刪除,它是可能這個基類從來沒有打算複製到第一位。

+0

Order :: operator =(source)確實是我的問題的答案。該程序現在完美工作。我的問題是,爲什麼?根本沒有在基類中定義賦值運算符,只有在派生類SpecialOrder中。我如何能夠將範圍擴展到Order類並使用屬於其子項之一的成員函數?我一直認爲孩子是從父母那裏繼承的,而不是相反的。 – onemic

+1

閱讀'隱含聲明的複製賦值運算符'部分http://en.cppreference.com/w/cpp/language/as_operator – user657267

相關問題