《函數(shù)重載與運(yùn)算符重載的應(yīng)用研究》由會(huì)員分享,可在線閱讀,更多相關(guān)《函數(shù)重載與運(yùn)算符重載的應(yīng)用研究(3頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、函數(shù)重載與運(yùn)算符重載的應(yīng)用研究
論文導(dǎo)讀:多態(tài)性是面向?qū)ο蟮某绦蛟O(shè)計(jì)中的三大基本特征(封裝性。多態(tài)性)之一。重載在C++中可分為兩種:函數(shù)重載和運(yùn)算符重載。運(yùn)算符重載實(shí)質(zhì)上就是函數(shù)重載。關(guān)鍵詞:面向?qū)ο?多態(tài)性,函數(shù)重載,運(yùn)算符重載1. 引言多態(tài)性是面向?qū)ο蟮某绦蛟O(shè)計(jì)中的三大基本特征(封裝性,繼承性,多態(tài)性)之一,其含義是指同一個(gè)消息被不同類型的對(duì)象接收時(shí)會(huì)導(dǎo)致不同的的行為實(shí)現(xiàn)。在C++中,多態(tài)性包括強(qiáng)制多態(tài)、重載多態(tài)、參數(shù)類型多態(tài)和包含多態(tài)四種。其中,重載是實(shí)現(xiàn)C++多態(tài)性的一種重要機(jī)制,稱為重載多態(tài),即為程序正文中相同作用域內(nèi)的的同一個(gè)標(biāo)識(shí)符賦予不同的操作語義,實(shí)質(zhì)上也就是實(shí)現(xiàn)了程序
2、空間到代碼空間的一對(duì)多映射。重載在C++中可分為兩種:函數(shù)重載和運(yùn)算符重載。2. 函數(shù)重載在程序編譯時(shí),讓相同的函數(shù)名映射到不同的函數(shù)代碼,稱為函數(shù)重載。在C++中,函數(shù)重載可以分別以普通函數(shù)和成員函數(shù)來實(shí)現(xiàn)。2.1 普通函數(shù)重載例1:#include int max(int x,int y){returnx>y?x:y;}//求2個(gè)整數(shù)的最大值int max(int x,int y,int z) //求3個(gè)整數(shù)的最大值{returnx>y?(x>z?x:z):(y>z?y:z);}void main( ){coutclass A{public:A( ): a(0){coutclass Com
3、plex //復(fù)數(shù)類{public:Complex(doublex,double y): real(x), imag(y) { }Complex operator++( )//前置增量運(yùn)算符'++'重載為成員函數(shù){++real; ++imag; return*this;}Complexoperator++(int)//后置增量運(yùn)算符'++'重載為成員函數(shù){Complex temp(*this);real++; imag++; return temp;}private:double real,imag;//實(shí)部、虛部};int main( ){ Complex c(1,2); }例3中聲明了一個(gè)
4、復(fù)數(shù)類Complex,其中有兩個(gè)私有數(shù)據(jù)成員,分別表示實(shí)部和虛部。主函數(shù)執(zhí)行時(shí),編譯器會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象c,即1+2i。在復(fù)數(shù)類Complex的聲明中,以成員函數(shù)方式分別對(duì)前置、后置增量運(yùn)算符這兩個(gè)單目運(yùn)算符進(jìn)行了重載,使得Complex類對(duì)象可以進(jìn)行前置、后置增量運(yùn)算。論文發(fā)表。值得注意的是兩者的區(qū)別,即后置增量運(yùn)算符的重載函數(shù)中多一個(gè)int形參,它沒有實(shí)際意義,只是為了區(qū)別于前置增量運(yùn)算符的重載函數(shù)。3.3 友元函數(shù)方式可以在例3復(fù)數(shù)類Complex的聲明中增加以下代碼:friend ostream&operator<<(ostream &output,Complex &c){ /
5、/流插入運(yùn)算符'<<'重載為友元函數(shù)output<
6、時(shí),首先++,編譯器的理解為c. operator++( ),即調(diào)用重載后的前置增量運(yùn)算符'++'函數(shù)。論文發(fā)表。論文發(fā)表。然后<<,編譯器的理解為operator<<(cout,c),即調(diào)用重載后的流插入運(yùn)算符'<<'函數(shù),輸出前置增量運(yùn)算后的對(duì)象c,形成結(jié)果中的第二行;③處執(zhí)行時(shí),首先++,編譯器的理解為c. operator++(int),即調(diào)用重載后的后置增量運(yùn)算符'++'函數(shù)。然后<<,編譯器的理解為operator<<(cout, c),即調(diào)用重載后的流插入運(yùn)算符'<<'函數(shù),輸出后置增量運(yùn)算后的對(duì)象c,形成結(jié)果中的第三行。3.4 類型轉(zhuǎn)換函數(shù)運(yùn)算符重載中還有一種比較特殊的是強(qiáng)制類
7、型轉(zhuǎn)換運(yùn)算符重載函數(shù),重載后成為類的特殊成員函數(shù),在適當(dāng)?shù)臅r(shí)候由編譯器自動(dòng)調(diào)用以實(shí)現(xiàn)類類型對(duì)象向普通數(shù)據(jù)類型數(shù)據(jù)的強(qiáng)制轉(zhuǎn)換。可繼續(xù)在例3 Complex類的聲明中增加以下代碼:operator double( ){return real;} //強(qiáng)制類型轉(zhuǎn)換運(yùn)算符重載為成員函數(shù)然后在主函數(shù)末尾增加一句:cout<<(c+5.0);此時(shí),編譯器首先執(zhí)行c+5.0,由于沒有對(duì)算術(shù)運(yùn)算符'+'進(jìn)行重載,所以編譯器只能調(diào)用剛剛增加的類型轉(zhuǎn)換函數(shù)operator double( )將Complex類對(duì)象c強(qiáng)制類型轉(zhuǎn)換成double類型,由于經(jīng)過了上述兩次增量運(yùn)算,此時(shí)對(duì)象c的實(shí)部real已經(jīng)等于3.0;然后與5.0相加,最后輸出結(jié)果為8.0。4. 結(jié)語以上對(duì)函數(shù)重載和運(yùn)算符重載的概念,用法和區(qū)別進(jìn)行了討論。重載的目的是為了實(shí)現(xiàn)表達(dá)方式共享,熟練地掌握并運(yùn)用重載,特別運(yùn)算符重載,可以有效地提高程序的可讀性,實(shí)現(xiàn)對(duì)C++語言本身的擴(kuò)充,同時(shí)也能更深刻地理解C++中多態(tài)性的實(shí)現(xiàn)機(jī)制。參考文獻(xiàn):[1] 錢能. C++程序設(shè)計(jì)教程[M]. 北京: 清華大學(xué)出版社, 1999[2] 曹計(jì)昌等著. C++語言及面向?qū)ο蟪绦蛟O(shè)計(jì)[M]. 北京: 高等教育出版社, 2004[3] 鄭莉, 董淵. C++語言程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社, 1999?