我遇到了以下問題,這證明我對C++的工作知之甚少。當基類的指針被調用時,賦值運算符是否被重載?
我使用基類與純虛函數
class Base
...
和類型
class Derived : public Base{
private:
Foo* f1;
...
兩者的派生類具有賦值運算符來實現。除其他外,Derived的賦值運算符會複製f1中的數據。在我的代碼,我創建類的兩個新實例派生
Base* d1 = new Derived();
Base* d2 = new Derived();
如果我現在請賦值運算符
*d1 = *d2;
的衍生賦值運算符不叫,而在F1中的數據不會被複制!它只適用於我,如果我做
*dynamic_cast<Derived*>(d1) = *dynamic_cast<Derived*>(d2);
有人可以解釋爲什麼賦值運算符沒有超載嗎?
謝謝!
您沒有虛擬基類;如果'Base'是一個虛擬基類,'Derived'將被聲明爲'class Derived:public virtual Base'。你的基類可能有虛函數。 – 2010-09-16 23:32:23
我認爲你很容易混淆超載和覆蓋。 – fredoverflow 2010-09-17 08:53:46