[轉]C++重載()(強制類型轉換運算符)


在 C++ 中,類型的名字(包括類的名字)本身也是一種運算符,即類型強制轉換運算符。

類型強制轉換運算符是單目運算符,也可以被重載,但只能重載為成員函數,不能重載為全局函數。經過適當重載后,(類型名)對象這個對對象進行強制類型轉換的表達式就等價於對象.operator 類型名(),即變成對運算符函數的調用。

下面的程序對 double 類型強制轉換運算符進行了重載。

#include <iostream>
using namespace std;
class Complex
{
    double real, imag;
public:
    Complex(double r = 0, double i = 0) :real(r), imag(i) {};
    operator double() { return real; }  //重載強制類型轉換運算符 double
};
int main()
{
    Complex c(1.2, 3.4);
    cout << (double)c << endl;  //輸出 1.2
    double n = 2 + c;  //等價於 double n = 2 + c. operator double()
    cout << n;  //輸出 3.2
}

  程序的輸出結果是:
1.2
3.2

第 8 行對 double 運算符進行了重載。重載強制類型轉換運算符時,不需要指定返回值類型,因為返回值類型是確定的,就是運算符本身代表的類型,在這里就是 double。

重載后的效果是,第 13 行的(double)c等價於c.operator double()

有了對 double 運算符的重載,在本該出現 double 類型的變量或常量的地方,如果出現了一個 Complex 類型的對象,那么該對象的 operator double 成員函數就會被調用,然后取其返回值使用。

例如第 14 行,編譯器認為本行中c這個位置如果出現的是 double 類型的數據,就能夠解釋得通,而 Complex 類正好重載了 double 運算符,因而本行就等價於:

double n = 2 + c.operator double();

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM