国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C++中運(yùn)算符的重載應(yīng)用

2010-08-15 00:48
辦公自動(dòng)化 2010年22期
關(guān)鍵詞:賦值復(fù)數(shù)運(yùn)算

張 捷

(黃岡職業(yè)技術(shù)學(xué)院 黃岡 438002)

一、 什么是運(yùn)算符的重載

運(yùn)算符重載是對(duì)已有的運(yùn)算符賦予多重含義,使同一個(gè)運(yùn)算符作用于不同類型的表達(dá)式的行為。運(yùn)算符重載的實(shí)質(zhì)就是函數(shù)重載。在實(shí)現(xiàn)過(guò)程中,首先把指定的運(yùn)算符表達(dá)式轉(zhuǎn)化為對(duì)運(yùn)算符函數(shù)的調(diào)用,運(yùn)算對(duì)象轉(zhuǎn)化為運(yùn)算符函數(shù)的實(shí)參,然后根據(jù)實(shí)參的類型來(lái)確定需要調(diào)用的函數(shù),這個(gè)過(guò)程是在編譯過(guò)程中完成的。

例如:用“+”運(yùn)算符完成兩個(gè)實(shí)數(shù)、兩個(gè)復(fù)數(shù)、兩個(gè)字符串的相關(guān)運(yùn)算。兩個(gè)實(shí)數(shù)a=10,b=2,則兩個(gè)實(shí)數(shù)相加的結(jié)果是:a+b=10+2=12;兩個(gè)復(fù)數(shù):a=10+2i,b=2+10i,則兩個(gè)復(fù)數(shù)相加的結(jié)果是:a+b=12+12i;兩個(gè)字符串:a=“visual”,b=“ studio”,則兩字符串連接的結(jié)果是:a+b=“visual studio”。由上例可以看出,同一個(gè)運(yùn)算符“+”可以用于完成實(shí)數(shù)加法、復(fù)數(shù)加法及字符串連接等不同的運(yùn)算,得到不同的結(jié)果。這就是“+”運(yùn)算符的重載。因此,所謂的運(yùn)算符重載就是用同一個(gè)運(yùn)算符完成不同的運(yùn)算操作。

二、 運(yùn)算符重載的規(guī)則

對(duì)運(yùn)算符進(jìn)行重載需要遵守以下規(guī)則:

(1)重載運(yùn)算符限制在C++語(yǔ)言中已有的并允許重載的運(yùn)算符。C++中的運(yùn)算符除五個(gè)運(yùn)算符“.、* 、::、sizeof、?:”之外,其它都可重載。

(2)重載之后運(yùn)算符的優(yōu)先級(jí)和結(jié)合性均不改變。這就是說(shuō),對(duì)運(yùn)算符重載不改變運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,并且運(yùn)算符重載時(shí),單目運(yùn)算符只能重載為單目運(yùn)算符,雙目運(yùn)算符只能重載為雙目運(yùn)算符。

(3)不能改變運(yùn)算符運(yùn)算數(shù)的個(gè)數(shù)。在運(yùn)算數(shù)中,至少有一個(gè)操作對(duì)象是自定義類型。

(4)重載運(yùn)算含義必須清楚,不能產(chǎn)生二義性。運(yùn)算符的重載實(shí)質(zhì)是函數(shù)重載。運(yùn)算符重載一般分兩種形式,即重載為類的成員函數(shù)和重載為類的友元函數(shù),這兩種形式都可訪問(wèn)類中的私有成員。

三、 運(yùn)算符重載的實(shí)現(xiàn)

在C++中,運(yùn)算符的重載有兩種方法:使用類的成員函數(shù)重載和使用fiend函數(shù)重載。下面通過(guò)實(shí)例來(lái)說(shuō)明這兩種重載方法的實(shí)現(xiàn)。

1、 使用成員函數(shù)重載運(yùn)算符

運(yùn)算符重載函數(shù)為類的成員函數(shù)的常見(jiàn)格式為:

返回類型 類名::operator重載運(yùn)算符(參數(shù)表)

{函數(shù)體}

其中,函數(shù)類型指定重載運(yùn)算符的返回值類型;operator是定義運(yùn)算符重載函數(shù)的關(guān)鍵字;運(yùn)算符是要重載的運(yùn)算符名稱;參數(shù)表中給出重載運(yùn)算所需要的參數(shù)和類型。一般情況下,單目運(yùn)算符采用成員函數(shù)形式重載時(shí),操作數(shù)由對(duì)象的this指針給出,不需要參數(shù);雙目運(yùn)算符采用成員函數(shù)形式重載時(shí),一個(gè)操作數(shù)是對(duì)象本身的數(shù)據(jù),由this指針指出。參數(shù)表的參數(shù)為第二操作數(shù),只需一個(gè)參數(shù)??傊?,當(dāng)運(yùn)算符重載為類的成員函數(shù)時(shí),除后置“++、--”外,函數(shù)的參數(shù)個(gè)數(shù)比原來(lái)的操作數(shù)個(gè)數(shù)少一個(gè)。

實(shí)例:定義一個(gè)復(fù)數(shù)類,重載“=”運(yùn)算符,使這個(gè)運(yùn)算符能直接完成復(fù)數(shù)的賦值運(yùn)算。

#include

Calss complex

{private:

Float real,image;

Public:

Complex(float r=0,float i=0)

{real=r;image=i;}//缺省構(gòu)造函數(shù)

Void show(int i) //顯示輸出復(fù)數(shù)

{count<<”c”<

Void operator=(complex&c)

{real=c.real;image=c.image;

}

};

Void main(void)

{complexc1(25,20),c2;

C1.show(1);

C2=c1;

C2.show(2);

}

程序執(zhí)行后輸出:c1=25+50i c2=25+50i

該重載函數(shù)的函數(shù)名為“operator=”,返回類型為void,形參為復(fù)數(shù)類對(duì)象的引用complex&c。當(dāng)程序執(zhí)行主函數(shù)中的賦值語(yǔ)句c2=c1而遇到賦值運(yùn)算符“=”時(shí),自動(dòng)調(diào)用賦值運(yùn)算符“=”重載函數(shù)“operator=()”,并將“=”運(yùn)算符右邊的操作數(shù)c1作為實(shí)參,左邊操作數(shù)c2作為調(diào)用重載函數(shù)的對(duì)象,即作了一次c2.operator=(c1)的函數(shù)調(diào)用。在函數(shù)的調(diào)用過(guò)程中,實(shí)參c1傳給形參c,在函數(shù)體內(nèi)完成了復(fù)數(shù)實(shí)部與虛部的賦值操作。

2、 使用friend函數(shù)重載運(yùn)算符

對(duì)于運(yùn)算符op,如果它的一個(gè)操作數(shù)為類A的對(duì)象,就可以將運(yùn)算符重載為A類的友元函數(shù),該函數(shù)有兩個(gè)形參,其中一個(gè)形參的類型是A類。經(jīng)過(guò)這樣的重載后,表達(dá)式k op t就相當(dāng)于函數(shù)調(diào)用operator op(k,t)。與使用成員函數(shù)定義的方法相比較,友元函數(shù)的一般定義格式只是在前面多了一個(gè)關(guān)鍵字friend,其他項(xiàng)目含義相同,除格式差別外,友元函數(shù)不是k所在類的成員函數(shù)。運(yùn)算符重載函數(shù)為友元函數(shù)的一般定義格式為:Friend類型operator重載運(yùn)算符(參數(shù)表){函數(shù)體}

四、 應(yīng)用運(yùn)算符重載應(yīng)注意的問(wèn)題

由于C++語(yǔ)言支持函數(shù)重載,所以才能將運(yùn)算符當(dāng)成函數(shù)來(lái)使用。但是在編程過(guò)程中要適當(dāng)運(yùn)用運(yùn)算符重載:既不要因過(guò)分擔(dān)心自己不會(huì)用而不使用,它的本質(zhì)仍然是程序員們熟悉的函數(shù);也不要過(guò)度的使用,如果它不能使代碼變得更加易讀易寫,那就別用,否則會(huì)增加程序出錯(cuò)的可能。同時(shí)在使用運(yùn)算符的重載時(shí)還要注意如下問(wèn)題:

■不能改變C++內(nèi)部數(shù)據(jù)類型(如int,float等)的運(yùn)算符

■不能重載“.”,因?yàn)椤?”在類中對(duì)任何成員都有意義,已經(jīng)成為標(biāo)準(zhǔn)用法。

■不能重載目前C++運(yùn)算符集合中沒(méi)有的符號(hào),如#,@,$等。原因有兩點(diǎn),一是難以理解,而是難以確定優(yōu)先級(jí)。

■對(duì)已經(jīng)存在的運(yùn)算符進(jìn)行重載時(shí),不能改變優(yōu)先級(jí)規(guī)則,否則將引起混亂。

[1]蘭添才.C++中函數(shù)重載與操作符重載的應(yīng)用探討[J].福建電腦,2003,(02).

[2]藍(lán)雯飛,陸際光.C++語(yǔ)言的重載機(jī)制剖析[J].微計(jì)算機(jī)應(yīng)用,2000,(05).

[3]李 智.C++宏,函數(shù)重載與模板機(jī)制[J].電腦,1995,(05).

[4]李 智.C++函數(shù)重載與繼承機(jī)制的應(yīng)用[J].中國(guó)金融電腦,1995,(08).

[5]沈慧娟.C++語(yǔ)言中運(yùn)算符重載的應(yīng)用研究[J].甘肅廣播電視大學(xué)學(xué)報(bào),2006,(03).

猜你喜歡
賦值復(fù)數(shù)運(yùn)算
重視運(yùn)算與推理,解決數(shù)列求和題
評(píng)析復(fù)數(shù)創(chuàng)新題
單數(shù)和復(fù)數(shù)
求解復(fù)數(shù)模及最值的多種方法
數(shù)系的擴(kuò)充和復(fù)數(shù)的引入
長(zhǎng)算式的簡(jiǎn)便運(yùn)算
算法框圖問(wèn)題中的易錯(cuò)點(diǎn)
“整式的乘法與因式分解”知識(shí)歸納
抽象函數(shù)難度降 巧用賦值來(lái)幫忙
利用賦值法解決抽象函數(shù)相關(guān)問(wèn)題オ
莱西市| 滁州市| 怀化市| 冕宁县| 英山县| 朔州市| 上蔡县| 沅江市| 泾川县| 曲阳县| 鄂托克前旗| 八宿县| 繁峙县| 闵行区| 涿鹿县| 和林格尔县| 岳阳市| 马山县| 修水县| 淳安县| 吉木乃县| 盖州市| 亚东县| 江津市| 怀远县| 拜城县| 南丹县| 五寨县| 基隆市| 抚远县| 海南省| 津南区| 仪征市| 凤山县| 佛坪县| 财经| 秦皇岛市| 库车县| 吴旗县| 麻城市| 民和|