C++運算子多載(6) 重載轉換操作符__C++

來源:互聯網
上載者:User

類型轉換符採用通用形式:

operator /*重載類型*/() {/*內容*/}

對任何可作為函數的傳回型別(除了void之外),都可以進行重載

不允許轉換為數組或函數類型,轉換為指標類型以及參考型別是可以的

operator int(Small Int& ); // error:nonmemberclass SmallInt{public:int operator int(); // error: return listoperator int(int = 0);  // error:parameter list// ...};

這個例子中有三個錯誤

(1)轉換函式必須為成員函數

(2)類型轉換不能有形參

(3)類型轉換不能有傳回值


雖然轉換函式不能指定返回的類型,但是每個轉換函式必須顯示地返回一個指定的值

比如operator int() 返回int類型的值, operator sales_item() 返回sales_item類型的值


轉換操作符的使用:

class Interger {private:int data;  public:Interger(int v) {  data = v;}////重載賦值操作符 可以實現把int類型賦值賦給interger類型Interger& operator = (const int& v) {data = v;return *this;   //返回Interger對象}//類型轉換操作符:在把interger類型賦值給int類型時 先會隱式地把interger類型轉為int類型 再賦給intergeroperator int() {return data;}//取資料int getData() {return data;}};

重載=: 可以實現(interger) a = (int) b

重載轉換符int: 當(int) b = (interger) a 時, 先會把賦值符右邊的a從interger轉為int,再把a賦值給b

重載int就實現了兩個變數之間的賦值

int main() {int a = 0;Interger b(10);b = a;cout << b.getData() << endl;system("PAUSE");return 0;}

再來看一個特殊的例子:

#include <iostream>  #include <cmath>     using namespace std;     class Complex  {  private:      double real;      double imag;     public:      // 預設建構函式      Complex(double r = 0.0, double i = 0.0) : real(r), imag(i)      {}         // 求複數的絕對值      double mag()      {          return getMag();      }         // 轉換操作符      operator double ()      {          return getMag();      }     private:      // get magnitude      double getMag()      {          return sqrt(real * real + imag * imag);      }  };     int main()  {      // 定義一個複數對象      Complex com(3.0, 4.0);         // 列印magnitude,可以使用下面的兩種方法      //方法1      cout << com.mag() << endl;      //方法2      cout << com << endl;  }  

這裡的方法2為什麼也會顯示和方法1一樣的內容呢

com是一個Complex類型, cout<<com<<endl是不被允許的

但重載轉換操作符double後 com會先從Complex型轉為double類型 再被輸出資料流輸出


但是應該避免方法2,方法2容易出錯.


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.