程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺談C++虛重載操作符 virtual operator= 的運用辦法

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

編輯:關於C++

淺談C++虛重載操作符 virtual operator= 的運用辦法。本站提示廣大學習愛好者:(淺談C++虛重載操作符 virtual operator= 的運用辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談C++虛重載操作符 virtual operator= 的運用辦法正文


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= 的運用辦法全部內容了,希望大家多多支持~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved