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

C++中運算符的重載應用

2010-08-15 00:48:41
辦公自動化 2010年22期

張 捷

(黃岡職業技術學院 黃岡 438002)

一、 什么是運算符的重載

運算符重載是對已有的運算符賦予多重含義,使同一個運算符作用于不同類型的表達式的行為。運算符重載的實質就是函數重載。在實現過程中,首先把指定的運算符表達式轉化為對運算符函數的調用,運算對象轉化為運算符函數的實參,然后根據實參的類型來確定需要調用的函數,這個過程是在編譯過程中完成的。

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

二、 運算符重載的規則

對運算符進行重載需要遵守以下規則:

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

(2)重載之后運算符的優先級和結合性均不改變。這就是說,對運算符重載不改變運算符的優先級和結合性,并且運算符重載時,單目運算符只能重載為單目運算符,雙目運算符只能重載為雙目運算符。

(3)不能改變運算符運算數的個數。在運算數中,至少有一個操作對象是自定義類型。

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

三、 運算符重載的實現

在C++中,運算符的重載有兩種方法:使用類的成員函數重載和使用fiend函數重載。下面通過實例來說明這兩種重載方法的實現。

1、 使用成員函數重載運算符

運算符重載函數為類的成員函數的常見格式為:

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

{函數體}

其中,函數類型指定重載運算符的返回值類型;operator是定義運算符重載函數的關鍵字;運算符是要重載的運算符名稱;參數表中給出重載運算所需要的參數和類型。一般情況下,單目運算符采用成員函數形式重載時,操作數由對象的this指針給出,不需要參數;雙目運算符采用成員函數形式重載時,一個操作數是對象本身的數據,由this指針指出。參數表的參數為第二操作數,只需一個參數。總之,當運算符重載為類的成員函數時,除后置“++、--”外,函數的參數個數比原來的操作數個數少一個。

實例:定義一個復數類,重載“=”運算符,使這個運算符能直接完成復數的賦值運算。

#include

Calss complex

{private:

Float real,image;

Public:

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

{real=r;image=i;}//缺省構造函數

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

{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);

}

程序執行后輸出:c1=25+50i c2=25+50i

該重載函數的函數名為“operator=”,返回類型為void,形參為復數類對象的引用complex&c。當程序執行主函數中的賦值語句c2=c1而遇到賦值運算符“=”時,自動調用賦值運算符“=”重載函數“operator=()”,并將“=”運算符右邊的操作數c1作為實參,左邊操作數c2作為調用重載函數的對象,即作了一次c2.operator=(c1)的函數調用。在函數的調用過程中,實參c1傳給形參c,在函數體內完成了復數實部與虛部的賦值操作。

2、 使用friend函數重載運算符

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

四、 應用運算符重載應注意的問題

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

■不能改變C++內部數據類型(如int,float等)的運算符

■不能重載“.”,因為“.”在類中對任何成員都有意義,已經成為標準用法。

■不能重載目前C++運算符集合中沒有的符號,如#,@,$等。原因有兩點,一是難以理解,而是難以確定優先級。

■對已經存在的運算符進行重載時,不能改變優先級規則,否則將引起混亂。

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

[2]藍雯飛,陸際光.C++語言的重載機制剖析[J].微計算機應用,2000,(05).

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

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

[5]沈慧娟.C++語言中運算符重載的應用研究[J].甘肅廣播電視大學學報,2006,(03).

主站蜘蛛池模板: 午夜无码一区二区三区| 成人小视频网| 福利视频久久| 亚洲一区二区成人| 欧美精品成人| 日韩av资源在线| yy6080理论大片一级久久| 久久精品娱乐亚洲领先| 日本欧美在线观看| 欧美一区二区啪啪| 国产精品天干天干在线观看 | 亚洲另类色| 一区二区三区精品视频在线观看| 成人蜜桃网| 亚洲最猛黑人xxxx黑人猛交| 国产三级成人| 国产成人精品日本亚洲77美色| 亚洲综合片| 亚洲男人天堂2020| 国产97视频在线观看| 极品av一区二区| 国产成人91精品| 国产呦精品一区二区三区下载 | 欧类av怡春院| 亚洲成av人无码综合在线观看| av在线5g无码天天| 日本高清免费不卡视频| 亚洲国产欧洲精品路线久久| 国产精品网址在线观看你懂的| 欧美一区二区三区不卡免费| 欧美午夜理伦三级在线观看| 秘书高跟黑色丝袜国产91在线| 亚洲成人网在线播放| 欧美高清国产| 国外欧美一区另类中文字幕| 久久网欧美| 亚洲三级成人| 曰韩人妻一区二区三区| 国产福利一区视频| 久久女人网| a级毛片网| 综合色婷婷| 宅男噜噜噜66国产在线观看| 久久久久88色偷偷| 精品国产自| 欧美国产精品拍自| 色偷偷av男人的天堂不卡| 97视频精品全国免费观看| 污网站在线观看视频| 成人国产精品一级毛片天堂| 国产交换配偶在线视频| 欧美精品在线看| 欧美色综合久久| 精品福利一区二区免费视频| 欧美亚洲欧美| 激情爆乳一区二区| julia中文字幕久久亚洲| 欧美性色综合网| 国产18在线| 免费jjzz在在线播放国产| 欧美伊人色综合久久天天| 青草91视频免费观看| 性色在线视频精品| 亚洲一区国色天香| 一本色道久久88| 日韩人妻无码制服丝袜视频| 久久国产亚洲欧美日韩精品| 国产精品亚欧美一区二区三区| 国产成人资源| 国产精品999在线| 欧美日韩国产在线播放| 日本午夜精品一本在线观看 | 毛片在线播放网址| 欧美成人免费一区在线播放| 人妻一区二区三区无码精品一区| 亚洲综合二区| 一区二区三区成人| 永久在线精品免费视频观看| 国产成a人片在线播放| www.91在线播放| 乱人伦视频中文字幕在线| 亚洲第一极品精品无码|