8.1 運算符函數與運算符重載
考點1 運算符函數與運算符重載的概念
運算符重載就是賦予已有的運算符多重含義。C++通過重新定義運算符,使它能夠作用于特定的對象,從而執行特定的功能。因為任何運算都是通過函數來實現的,所以運算符重載其實就是函數重載。我們把重載的運算符視為特殊的函數,稱為運算符函數因此,運算符重載就是函數重載的一種特殊情況。C++的運算符大部分都可以重載,不能重載的只有‘“.”,“::”,“.*”,“->*”,“?:”。除了new和delete之外,任何運算符作為成員函數重載時,不得重載為static函數! perator是C ++的一個關鍵字,它經常和C++的一個運算符連用,構成一個運算符函數名,例如:operator +,重載運算符函數為operator +()。一般說來,要在C ++中重載運算符@,只需要定義一個名為operator@的函數就可以了,具體的格式為:
TYPE operator@(參數表){
…//函數定義
}
小提示:
這里的TYPE是函數的返回類型,運算符函數的返回類型不能是void類型。
考點2 運算符重載應注意的幾個問題
運算符重載應注意的幾個問題如下:
(1)運算符重載后的優先級。用戶重新定義運算符,不改變運算符的優先級和結合性,也不改變運算符的語法結構,即單目運算符只能重載為單目運算符,雙目運算符只能重載為雙目運算符。
(2)對運算符重載的限制。不可臆造新的運算符;不能改變運算符操作數的個數;不能改變運算符原有的優先級、結合性和語法結構。
(3)運算符重載時必須遵循的原則。運算符重載含義必須清楚;運算符重載不能有二義性。
(4)編譯程序運算符函數的選擇。編譯程序對運算符重載的選擇,遵循著函數重載的選擇原則。當遇到不明顯的運算符時,編譯程序將去尋找與參數相匹配的運算符函數。
考點3 運算符重載函數的兩種形式
運算符重載的函數一般有兩種形式:成員函數形式和友元函數形式。這兩種形式都可以訪問類中的私有成員
(l)將運算符重載函數說明為類的成員函數的格式如下:
<類名>operator<運算符>(<參數表>)
其中,成員函數有隱含參數的this指針,一般是指第1個操作數。對雙目運算符,有1個參數,一般指第2個操作數;對單目運算符,參數表為空。
(2)將運算符重載函數說明為類的友元函數的格式如下:
friend<類名>operator<運算符>(<參數表>)
其中,友元函數沒有隱含參數的this指針。因此,對雙目運算符,友元函數有2個參數;對單目運算符,友元函數有1個參數。
8.2 典型運算符的重載
考點4 幾種典型運算符的重載
1.重載取負運算符“-”
文章來源于領測軟件測試網 http://www.kjueaiud.com/