c++中运算符重载方式中你易遗漏的小细节
運算符重載函數相當于類來說有兩種存在方式:
1.重載為類的成員函數。
2.重載為類的友元函數。
重載為類的成員函數。
如果把運算符重載為類的成員函數,則該函數么須通過對象調用,該對象就是運算符的其中一個操作數,在運算符重載函數中通過this指針隱含(或顯式)地訪問對象的成員。 如果把雙目運算符重載為類的成員函數,則該運算符有兩個操作數,左操作數是調用運復符重載函數的對象,而右操作數作為運算符重載函數的實參傳遞到運算符重載函數中雙目運算符重載為類的成員函數時,其調用的一般格式如下: **左操作數 運算符 右操作數;** 編譯器把它解釋為 **左操作數.operator 運算符(右操作數);** 即左操作數是調用運算符重載函數的對象,右操作數作為函數的參數。例如,表達式“sl>=s2”相當于“s1. operator>=(s2)”
如果把單目運算符重載為類的成員函數,則該運算符只有一個操作數,即調用運算符重載函數的對象本身。單目運算符重載為類的成員函數時,要區分前置運算符與后置運算符如果是前置運算符,則運算符重載函數沒有參數。其調用格式如下:**運算符 操作數;**編輯器把它解釋為**操作數.operator 運算符();**
注意:
如果是后置運算符,運算符重載函數需要一個整型參數,*但該參數不起任何作用,僅用來標識該運算符是后置運算符。*其調用格式如下:
操作數 運算符;
編譯器把它解釋為
操作數 operator 運算符 (int)
下面通過一個示例,演示重載自增運算符的方法,實現自定義Time類對象 t的自增運算運算規則則是把當前對象t的秒數加一。
本例實現前置自增及后置自增運算,前置自增函數不帶參數,后置自增函數帶一個int類型的參數,這里的int僅用于區別前置自增,在函數調用時不帶參數。本程序值得讀者借鑒的地方是在實現后置自增時直接調用了已經實現的前置
自增運算符。從結果來看,后置自增運算表式保留了對象自增之前的值,并且對象實現了自增;前置自增運算實現了對象的自增,并且表達式的值是對象自增之后的值。這與算術運算中自增運算符的功能是吻合的。
重載為類的友元函數。
運算符重載函數可以實現為類的成員函數,也可以實現為類的友元函數。運算符的左操作數如果不是當前類的對象,那么該運算符就不能聲明為類的成員函數只能聲明為類的友元函數。在類中對運算符重載函數進行友元函數的聲明格式如下:
friend 類型說明符 operator 運算符 (參數列表);
類的友元函數不能通過對象進行調用,所以運算符的操作數全部作為運算符重載函數
的實參傳遞到運算符重載函數中。雙目運算符重載函數重載為類的友元函數時的調用格式
如下:
做操作數 運算符 右操作數;
編譯器把它解釋為
operator 運算符 (左操作數,右操作數);
總結
以上是生活随笔為你收集整理的c++中运算符重载方式中你易遗漏的小细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++运算符重载中很多人易忘的小细节
- 下一篇: c++模板之函数模板