龐新法 PANG Xin-fa
(陜西省委黨??萍冀萄胁?,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
自然語(yǔ)言中的“一詞多義”,反映到程序中就是重載。例如“行動(dòng)”、“銀行”,“行”到底發(fā)何音,是何意,要根據(jù)上下文理解。
在C語(yǔ)言中,運(yùn)算符符“-”既表示兩數(shù)相減,又表示取一個(gè)數(shù)的相反數(shù);既可作用于整型數(shù)據(jù),又可作用于實(shí)型、指針等其它類型的數(shù)據(jù),這就是運(yùn)算符重載。C++是C功能的擴(kuò)充,比C更完善,更全面。
所謂運(yùn)算符重載就是同一個(gè)運(yùn)算符,根據(jù)不同的數(shù)據(jù)類型有著不同的含義和運(yùn)算,具體含義要根據(jù)上下文理解。重載擴(kuò)充了C++預(yù)定義的運(yùn)算符的運(yùn)算范圍,運(yùn)算符既可對(duì)已有數(shù)據(jù)類型進(jìn)行運(yùn)算,又可對(duì)用戶自己定義的新類型數(shù)據(jù)進(jìn)行運(yùn)算,方便編程。
格式:函數(shù)類型operator運(yùn)算符(形參表)
{函數(shù)體;}
功能:operator與運(yùn)算符的組合就是函數(shù)名。
運(yùn)算符重載實(shí)質(zhì)就是函數(shù)重載,C++在編譯過(guò)程中,把operator與運(yùn)算符的組合解釋為函數(shù)名,然后按照函數(shù)的定義、引用處理。
例1 class Co//復(fù)數(shù)類
可重載的運(yùn)算符
可重載的運(yùn)算符
①重載的運(yùn)算符有限制。②不能改變?cè)\(yùn)算符的優(yōu)先級(jí)、結(jié)合性、操作數(shù)的個(gè)數(shù)、語(yǔ)法結(jié)構(gòu)。③對(duì)已有的C++運(yùn)算符重載。④當(dāng)運(yùn)算符重載為類的成員函數(shù)時(shí),函數(shù)的參數(shù)個(gè)數(shù)比原來(lái)的操作個(gè)數(shù)要少一個(gè)。原因是成員函數(shù)通過(guò)this指針隱式地訪問(wèn)類對(duì)象的參數(shù);當(dāng)重載為類的友元函數(shù)時(shí),參數(shù)個(gè)數(shù)與原操作數(shù)個(gè)數(shù)相同。⑤運(yùn)算符重載實(shí)質(zhì)上是函數(shù)重載,因此編譯程序按照函數(shù)重載的處理辦法對(duì)運(yùn)算符重載進(jìn)行處理。⑥舊類型舊含義,新類型新含義,新含義與舊含義功能相似。
4.1 重載為類的成員函數(shù) 如例1所示。程序中出現(xiàn)的表達(dá)式:x+y編譯程序?qū)⒔o解釋為:x.operator+(y),其中,x和y是Co類的對(duì)象。operator+()是運(yùn)算+的重載函數(shù)。該運(yùn)算符重載函數(shù)僅有一個(gè)參數(shù)y??梢?jiàn),當(dāng)重載為成員函數(shù)時(shí),雙目運(yùn)算符僅有一個(gè)參數(shù)。對(duì)單目運(yùn)算符,重載為成員函數(shù)時(shí),不能再顯式說(shuō)明參數(shù)。重載為成員函數(shù)時(shí),總時(shí)隱含了一個(gè)參數(shù),該參數(shù)是this指針。this指針是指向調(diào)用該成員函數(shù)對(duì)象的指針。
4.2 重載為友元函數(shù) 運(yùn)算符重載函數(shù)還可以為友元函數(shù)。當(dāng)重載友元函數(shù)時(shí),將沒(méi)有隱含的參數(shù)this指針。這樣,對(duì)雙目運(yùn)算符,友元函數(shù)有2個(gè)參數(shù),對(duì)單目運(yùn)算符,友元函數(shù)有一個(gè)參數(shù)。但是,有些運(yùn)行符不能重載為友元函數(shù),它們是:=,(),[]和->。
重載為友元函數(shù)的運(yùn)算符重載函數(shù)的定義格式如下:
對(duì)于雙目運(yùn)算符,重載為成員函數(shù)時(shí),僅一個(gè)參數(shù),另一個(gè)被隱含;重載為友元函數(shù)時(shí),有兩個(gè)參數(shù),沒(méi)有隱含參數(shù)。因此,程序中出現(xiàn)的x+y編譯程序解釋為:operator+(x,y)調(diào)用函數(shù)Co operator+(const coplex&c1,const Co&c2)進(jìn)行求值。
例3 class Co//復(fù)數(shù)類
多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要支柱之一,而運(yùn)算符重載又是實(shí)現(xiàn)多態(tài)性的一個(gè)重要途徑。運(yùn)算符重載使得程序員把運(yùn)算符的使用擴(kuò)展到操作數(shù)是對(duì)象的情況,由運(yùn)算符構(gòu)成的表達(dá)式常常比函數(shù)調(diào)用更簡(jiǎn)潔易懂,熟練掌握運(yùn)算符重載,以提高C++編程能力。
[1]錢能.C++程序設(shè)計(jì)教程[M].清華大學(xué)出版社,2006.
[2]鄭莉.C++語(yǔ)言程序設(shè)計(jì)[M].清華大學(xué)出版社,2002.
[3]楊俊清.C++程序設(shè)計(jì)[M].西安電子科技大學(xué)出版社,2003.