C 類繼承下過載等號運算子

2021-10-20 23:58:53 字數 696 閱讀 9318

class base ;

//編譯器禁止宣告和定義時同時定義預設引數值。

//若宣告時沒有定義預設引數值,那麼在定義成員函式時可以定義預設引數值。但這種情況通常使用者是看不見的,因此應避免。

base::base(int val)

base& base::operator=(const base& rhy)

class derived:public base ;

derived& derived::operator=(const derived& rhy)

這樣過載賦值操作符是錯誤的,因為它並沒有對derived的基類base部分的成員value進行賦值。

方法二:可以使用基類的operator=函式對基類部分進行賦值:

derived& derived::operator=(const derived& rhy)

這樣定義一般情況下沒錯,但如果基類的賦值運算子是編譯器自己合成的,那麼有的編譯器會拒絕這種對基類賦值運算子的呼叫。

方法三:

derived& derived::operator=(const derived& rhy) 

將*this強制轉化為base&型別,呼叫基類的賦值運算子,只對基類base部分進行賦值 ,注意這裡必須轉換成引用型別base&,如果轉成base會呼叫拷貝建構函式建立新的物件,新物件成為賦值目標,而*this的成員保持不變,沒有達到預期。 

運算子過載 類 C

運算子過載 就是對已有的運算子 c 中預定義的運算子 賦予多重的含義,是同乙個運算子作用與不同型別的資料是導致不同型別的行為 實質 函式過載 1 可以過載為普通函式也可以過載為成員函式 2 把含運算子的表示式轉換成對運算子函式的呼叫 3 把運算子的運算元轉換 成 運算子函式的引數 4 運算子被多次過...

python 等號 過載 python運算子過載2

1 過載建構函式和減法運算 init sub file number.py class number def init self,data self.data data def sub self,other return number self,self.data other 2 索引和分片 實現 ...

運算子類過載

類過載格式 函式型別 operator 運算子名稱 形參表 型引數 使用引數 1 使用 號實現複數相加 不使用類過載 include using namespace std class complex complex double r,double i complex complex add com...