C++ 重载强制类型转换运算符
C++ 中,類型的名字(包括類的名字)本身也是一種運(yùn)算符,即類型強(qiáng)制轉(zhuǎn)換運(yùn)算符。
類型強(qiáng)制轉(zhuǎn)換運(yùn)算符是單目運(yùn)算符,也可以被重載,但只能重載為成員函數(shù),不能重載為全局函數(shù)。經(jīng)過適當(dāng)重載后,(類型名)對象這個對對象進(jìn)行強(qiáng)制類型轉(zhuǎn)換的表達(dá)式就等價(jià)于對象.operator 類型名(),即變成對運(yùn)算符函數(shù)的調(diào)用。
對 double 類型強(qiáng)制轉(zhuǎn)換運(yùn)算符進(jìn)行了重載。
#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; } //重載強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 double }; int main() {Complex c(1.2, 3.4);cout << (double)c << endl; //輸出 1.2double n = 2 + c; //等價(jià)于 double n = 2 + c. operator double()cout << n; //輸出 3.2 }程序的輸出結(jié)果是:
1.2 3.2第 8 行對 double 運(yùn)算符進(jìn)行了重載。重載強(qiáng)制類型轉(zhuǎn)換運(yùn)算符時,不需要指定返回值類型,因?yàn)榉祷刂殿愋褪谴_定的,就是運(yùn)算符本身代表的類型,在這里就是 double。
重載后的效果是,第 13 行的(double)c等價(jià)于c.operator double()。
有了對 double 運(yùn)算符的重載,在本該出現(xiàn) double 類型的變量或常量的地方,如果出現(xiàn)了一個 Complex 類型的對象,那么該對象的 operator double 成員函數(shù)就會被調(diào)用,然后取其返回值使用。
第 14 行,編譯器認(rèn)為本行中c這個位置如果出現(xiàn)的是 double 類型的數(shù)據(jù),就能夠解釋得通,而 Complex 類正好重載了 double 運(yùn)算符,因而本行就等價(jià)于:
double n = 2 + c.operator double();總結(jié)
以上是生活随笔為你收集整理的C++ 重载强制类型转换运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C 猜谜游戏
- 下一篇: C++ 重载new和delete运算符