999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2010-08-15 00:48:41
辦公自動(dòng)化 2010年22期

張 捷

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

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

運(yùn)算符重載是對(duì)已有的運(yùn)算符賦予多重含義,使同一個(gè)運(yùn)算符作用于不同類(lèi)型的表達(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)型來(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ì)象是自定義類(lèi)型。

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

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

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

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

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

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

{函數(shù)體}

其中,函數(shù)類(lèi)型指定重載運(yùn)算符的返回值類(lèi)型;operator是定義運(yùn)算符重載函數(shù)的關(guān)鍵字;運(yùn)算符是要重載的運(yùn)算符名稱(chēng);參數(shù)表中給出重載運(yùn)算所需要的參數(shù)和類(lèi)型。一般情況下,單目運(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)算符重載為類(lèi)的成員函數(shù)時(shí),除后置“++、--”外,函數(shù)的參數(shù)個(gè)數(shù)比原來(lái)的操作數(shù)個(gè)數(shù)少一個(gè)。

實(shí)例:定義一個(gè)復(fù)數(shù)類(lèi),重載“=”運(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=”,返回類(lèi)型為void,形參為復(fù)數(shù)類(lèi)對(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ù)為類(lèi)A的對(duì)象,就可以將運(yùn)算符重載為A類(lèi)的友元函數(shù),該函數(shù)有兩個(gè)形參,其中一個(gè)形參的類(lèi)型是A類(lèi)。經(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所在類(lèi)的成員函數(shù)。運(yùn)算符重載函數(shù)為友元函數(shù)的一般定義格式為:Friend類(lèi)型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ò)度的使用,如果它不能使代碼變得更加易讀易寫(xiě),那就別用,否則會(huì)增加程序出錯(cuò)的可能。同時(shí)在使用運(yùn)算符的重載時(shí)還要注意如下問(wèn)題:

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

■不能重載“.”,因?yàn)椤?”在類(lèi)中對(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).

主站蜘蛛池模板: 亚洲中文字幕在线观看| 久久青草视频| 一区二区三区精品视频在线观看| 日韩最新中文字幕| 99精品热视频这里只有精品7| 少妇露出福利视频| 99这里只有精品6| 国产女人18毛片水真多1| 毛片基地美国正在播放亚洲 | 996免费视频国产在线播放| 无码粉嫩虎白一线天在线观看| 精品91在线| 国产91精选在线观看| 亚洲成在线观看| 在线免费观看a视频| 亚洲最大看欧美片网站地址| 国产又粗又爽视频| 国产成人一区| 亚洲国产清纯| 国产真实自在自线免费精品| www.99在线观看| 国产99视频精品免费视频7| 国产九九精品视频| 任我操在线视频| 久久特级毛片| 国产在线观看精品| 日韩福利视频导航| 中文字幕在线播放不卡| 欧美黑人欧美精品刺激| 欧美伊人色综合久久天天| 在线色国产| 精品无码一区二区在线观看| 免费A∨中文乱码专区| 日韩一区二区三免费高清| 久久先锋资源| 欧美中文字幕一区| 大陆精大陆国产国语精品1024| 精品一區二區久久久久久久網站 | 国产色爱av资源综合区| 亚洲区第一页| 国产亚洲精品无码专| 国产99在线| 国产成人高清亚洲一区久久| 波多野结衣一区二区三区AV| 国产在线自揄拍揄视频网站| 国产探花在线视频| 免费高清a毛片| 国产成人亚洲无码淙合青草| 99无码熟妇丰满人妻啪啪| 伊人久久精品亚洲午夜| 韩日免费小视频| 国产永久在线视频| 欧美日韩免费在线视频| 8090成人午夜精品| 欧美国产日韩在线观看| 精品人妻无码中字系列| 国产精品理论片| 波多野结衣AV无码久久一区| 一本视频精品中文字幕| 亚洲国产av无码综合原创国产| 色婷婷在线影院| 亚洲av无码专区久久蜜芽| 中文字幕亚洲电影| 欧美福利在线| 精品国产电影久久九九| 亚国产欧美在线人成| 欧美日本视频在线观看| 日韩av手机在线| 波多野结衣无码AV在线| 欧美在线视频不卡第一页| 久久永久免费人妻精品| 青青草国产在线视频| 精品国产成人高清在线| а∨天堂一区中文字幕| 国产18页| 免费一极毛片| 亚洲第一区欧美国产综合 | 国产乱子伦手机在线| 四虎影视国产精品| 福利在线一区| 亚洲午夜福利在线| 亚洲最大情网站在线观看 |