C++重載()(強(qiáng)制類型轉(zhuǎn)換運(yùn)算符)

在?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)用。
下面的程序?qū)?double 類型強(qiáng)制轉(zhuǎn)換運(yùn)算符進(jìn)行了重載。
1.2
3.2
第 8 行對 double 運(yùn)算符進(jìn)行了重載。重載強(qiáng)制類型轉(zhuǎn)換運(yùn)算符時(shí),不需要指定返回值類型,因?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();
標(biāo)簽: