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