孫明方,周園園
沈陽師范大學(xué)物理科學(xué)與技術(shù)學(xué)院,遼寧 沈陽 110034
多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一,它與封裝性和繼承性共同組成面向?qū)ο蟮某绦蛟O(shè)計(jì)的三大基本特征,在函數(shù)重載中,同一個(gè)函數(shù)名可對(duì)應(yīng)若干種不同的實(shí)現(xiàn),依據(jù)函數(shù)參數(shù)的類型、個(gè)數(shù)和順序來確定某個(gè)實(shí)現(xiàn)。在運(yùn)算符重載中,同一個(gè)運(yùn)算符對(duì)應(yīng)著很多種功能,這些功能是通過函數(shù)來定義的,依據(jù)操作數(shù)的類型來確定應(yīng)選運(yùn)算符的功能。我們接觸的還有另一種是指同樣的消息被不同類的對(duì)象接受時(shí)產(chǎn)生完全不同的實(shí)現(xiàn),該情況大多產(chǎn)生在多類繼承中不同類中的相同說明的成員函數(shù)的多態(tài)行為。其中多態(tài)性分為專用多態(tài)和通用多態(tài),專用多態(tài)分為強(qiáng)制多態(tài)和重載多態(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)了程序空間到代碼空間的一對(duì)多映射。
簡單地說函數(shù)重載就是賦給同一個(gè)函數(shù)名多個(gè)含義。在我們學(xué)的C++中函數(shù)重載分為普通函數(shù)的重載和成員函數(shù)的重載,也就是說我們所學(xué)的函數(shù)重載可以以兩種不同的方式來實(shí)現(xiàn),就是我們所說的普通函數(shù)的重載和成員函數(shù)的重載。
例1:
上一例題中,兩個(gè)函數(shù)都是普通的函數(shù)重載,由于主函數(shù)中調(diào)用的兩個(gè)函數(shù)對(duì)應(yīng)的參數(shù)個(gè)數(shù)不同,所以通過形參和實(shí)參的結(jié)合,我們得到了運(yùn)行的結(jié)果。
例2:
這是一個(gè)很常見的習(xí)題,該函數(shù)調(diào)用了構(gòu)造函數(shù)的兩種形式,有參和無參,對(duì)應(yīng)于主函數(shù)中帶有不同形式參數(shù)的函數(shù),我們得到不同的結(jié)果。
運(yùn)算符重載就是就是賦予已有的運(yùn)算符多重含義,即多種功能。C++語言中通過重新定義運(yùn)算符,使它能夠用于特定類的對(duì)象執(zhí)行的特定的功能。一般情況下運(yùn)算符重載有兩種形式,重載為類的成員函數(shù)和重載為有元函數(shù)兩種。
例1:
執(zhí)行的結(jié)果同例1,兩種運(yùn)算符比較,我們知道單目運(yùn)算符最好被重載為成員函數(shù),雙目運(yùn)算符最好被重載為有元函數(shù)。
以上我們總結(jié)了函數(shù)重載和運(yùn)算符重載的區(qū)別和特點(diǎn)。眾所周知,重載是為了以不同的方式來實(shí)現(xiàn)函數(shù),我們?nèi)绻炀毜膽?yīng)用這門技術(shù),可以提高程序的運(yùn)行效率和可讀性,通過學(xué)習(xí),使我們更透徹地理解了C++的多態(tài)性問題。
[1]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005,8.
[2]呂鳳翥.C++語言基礎(chǔ)教程[M].2版.清華大學(xué)出版社,2007,2.
[3]Stanley B.Lippman.C++Primer中文版[M].人民郵電出版社,2006,3.