C++重載運算符的規矩詳解。本站提示廣大學習愛好者:(C++重載運算符的規矩詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++重載運算符的規矩詳解正文
(1)C++不許可用戶本身界說新的運算符,只能對已有的C++運算符停止重載。
例如,有人認為BASIC頂用“* *”作為冪運算符很便利,也想在C++中將“* *”界說為冪運算符,用“3* *5”表現35,這是不可的。
(2)C++許可重載的運算符
C++中絕年夜部門運算符都是可以被重載的。
不克不及重載的運算符只要5個:
. (成員拜訪運算符)
.* (成員指針拜訪運算符)
:: (域運算符)
sizeof (長度運算符)
?: (前提運算符)
前兩個運算符不克不及重載是為了包管拜訪成員的功效不克不及被轉變,域運算相符sizeof運算符的運算對象是類型而不是變量或普通表達式,不具有重載的特點。
(3)重載不克不及轉變運算符運算對象(即操作數)的個數。
如,關系運算符“>”和“<”等是雙目運算符,重載後仍為雙目運算符,須要兩個參數。運算符”+“,”-“,”*“,”&“等既可以作為單目運算符,也能夠作為雙目運算符,可以分離將它們重載為單目運算符或雙目運算符。
(4)重載不克不及轉變運算符的優先級別。
例如”*“和”/“優先級高於”+“和”-“,豈論如何停止重載,各運算符之間的優先級不會轉變。有時在法式中願望轉變某運算符的優先級,也只能應用加括號的辦法強迫轉變重載運算符的運算次序。
(5)重載不克不及轉變運算符的聯合性。
如,復制運算符”=“是右聯合性(自右至左),重載後仍為右聯合性。
(6)重載運算符的函數不克不及有默許的參數
不然就轉變了運算符參數的個數,與後面第(3)點抵觸。
(7)重載的運算符必需和用戶界說的自界說類型的對象一路應用,其參數至多應有一個是類對象(或類對象的援用)。
也就是說,參數不克不及全體是C++的尺度類型,以避免用戶修正用於尺度類型數據成員的運算符的性質,以下面如許是纰謬的:
int operator + (int a,int b)
{
return(a-b);
}
本來運算符+的感化是對兩個數相加,如今妄圖經由過程重載使它的感化改成兩個數相減。
假如許可如許重載的話,假如有表達式4+3,它的成果是7照樣1呢?明顯,這是相對要制止的。
(8)用於類對象的運算符普通必需重載,但有兩個破例,運算符”=“和運算符”&“不用用戶重載。
復制運算符”=“可以用於每個類對象,可以用它在同類對象之間互相賦值。由於體系已為每個新聲明的類重載了一個賦值運算符,它的感化是逐一復制類中的數據成員
地址運算符&也不用重載,它能前往類對象在內存中的肇端地址。
(9)應該使重載運算符的功效相似於該運算符感化於尺度類型數據時刻時所完成的功效。
例如,我們會去重載”+“以完成對象的相加,而不會去重載”+“以完成對象相減的功效,由於如許不相符我們對”+“本來的認知。
(10)運算符重載函數可所以類的成員函數,也能夠是類的友元函數,還可所以既非類的成員函數也不是友元函數的通俗函數。