国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

淺談C++虛重載操作符 virtual operator= 的使用方法

2020-05-23 13:55:13
字體:
來源:轉載
供稿:網友

C++中虛操作符和其他虛函數的規則一樣,操作符可以為虛函數,進行動態綁定, 雖然這種情況并不多見。本文以賦值操作符operator=舉例。

派生類中要重定義基類虛函數,要注意參數必須為基類引用類型,否則與基類中虛函數是完全不同的,無法進行預期的動態綁定。

派生類除了重定義基類的虛操作符,還要定義自身的操作符重載。即派生層次每增加一層,理論上派生類就需要多定義一個操作符重載。

以下程序使用引用reference,通過指針調用賦值操作符(例:*p = value)情況是一樣的。

#include <iostream> using namespace std;                class Base { public:   virtual Base& operator=(const Base& rhs) //重載操作符可設為virtual   {     cout << "Base" << endl;     return *this;   } };                class Derived : public Base { public:   //與基類的operator=完全不同,不是重新定義,不會動態綁定。   //如果不定義該操作符,會自動合成一個,并自動調用基類的operator=,不會動態綁定   Derived& operator=(const Derived& rhs)    {     cout << "Derived_D" << endl;     return *this;   }                  //重新定義基類的operator=,會動態綁定   //virtual Base& operator=(const Base& rhs) //返回值兩種都可以   virtual Derived& operator=(const Base& rhs)    {     cout << "Derived_B" << endl;     return *this;   } };                class Derived2 : public Derived {   //此類需要3個operator=   //可定義private的copy函數,由3個operator=調用   //可使用dynamic_cast將基類引用參數轉為子類,并捕獲異常。   //如果未發生異常,則調用copy,發生異常則不需賦值 };                int main() {   Base b1, b2;   Derived d1, d2;                  Derived &rd = d1;                  Base &rb1 = b1; //動態類型為Base   Base &rb2 = d2; //動態類型為Derived                    rb1 = d1; //輸出"Base"   rb2 = d2; //輸出"Derived_B"                  rb1 = rb2; //輸出"Base"   rb2 = rb1; //輸出"Derived_B"                  rd = d1; //輸出"Derived_D"   rd = b1; //輸出"Derived_B"                    getchar();   return 0; }

以上就是小編為大家帶來的淺談C++虛重載操作符 virtual operator= 的使用方法全部內容了,希望大家多多支持VEVB武林網~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 同德县| 都兰县| 南雄市| 麻栗坡县| 东莞市| 綦江县| 北碚区| 田东县| 灵璧县| 兰西县| 屏东市| 颍上县| 玛曲县| 左权县| 南雄市| 阳朔县| 汝州市| 惠安县| 瑞昌市| 新昌县| 敖汉旗| 南开区| 苗栗市| 禹州市| 巴彦县| 白沙| 峡江县| 工布江达县| 平顶山市| 五台县| 永泰县| 隆昌县| 奇台县| 慈溪市| 井研县| 东明县| 揭东县| 苏州市| 吉安市| 昌平区| 江油市|