我有一個繼承自MSFT類的類,因此無法更改,我希望我的派生類具有相同的行爲,用於其複製構造函數和複製賦值運算符。我遇到的麻煩是在複製構造函數中,您可以自由地爲初始化程序列表中的基類調用構造函數,但在運算符中,這不是一個選項。我如何在賦值運算符中正確地重新創建此行爲?
只需在運算符重載的主體中調用基類的構造函數就足夠了嗎?
在複製賦值運算符中分配基類成員
附加說明:基類繼承自CObject,它具有operator =()和拷貝構造函數作爲私有和未實現的方法,所以不幸的是任何調用都會導致編譯錯誤。
我提供以下的簡化的代碼情形:
類聲明:
class Base
{
protected:
int baseInt;
public:
Base(int);
}
class Derived : public Base
{
public:
Derived(const Derived& other);
Derived& operator=(const Derived& rhs);
private:
int derivedInt;
}
派生類的成員函數:
// Copy Constructor
Derived(const Derived& other) : Base(5)
{
derivedInt = other.derivedInt;
}
// Copy Assignment Operator
Derived& operator=(const Derived& rhs)
{
if (&rhs != this)
{
derivedInt = other.derivedInt;
return *this;
}
}
編輯:更新語法和加入CObject的音符
'Base(5);'只是創建一個臨時的'Base'對象,然後立即銷燬它... – 2013-04-04 14:43:51
@OliCharlesworth這就是我懷疑會發生的事情:/我不太熟悉如何重新創建一個初始化列表,所以它是在黑暗中拍攝的 – 2013-04-04 14:46:02