C++运算符重载(10)
編譯器在默認情況下為每個類生成一個默認的賦值操作,用于同類的兩個對象之間相互賦值。默認的含義是逐個為成員賦值,即將一個對象的成員的值賦給另一個對象相應的成員,這種賦值方式對于有些類可能是不正確的。
運算符重載形式有兩種,重載為類的成員函數和重載為類的友元函數。
C++的關鍵字“operator”和運算符一起使用就表示一個運算符函數。例如“operator +”表示重載“+”運算符。
運算符實質
C++是由函數組成的,在C++內部,任何運算都是通過函數來實現的。因為任何運算都是通過函數來實現的,所以運算符重載其實就是函數重載,要重載某個運算符,只要重載相應的函數就可以了。與以往稍有不同的是,需要使用新的關鍵字“operator”,它和C++的一個運算符連用,構成一個運算符函數名,例如“operator+”.通過這種構成方法就可以像重載普通函數那樣重載運算符函數operator+()。由于C++已經為各種基本數據類型定義了該運算函數,所以只需要為自己定義的類型重載operator+()就可以了。
C++的運算符大部分都可以重載,不能重載的只有. 、:: 、* 和 ?: 。前面三個是因為在C++中都有特定的含義,不準重載以避免不必要的麻煩;“?:”則是因為不值得重載。另外,“sizeof”和“#”不是運算符,因而不能重載,而=、()、[ ] 、->這4個運算符只能用類運算符來重載。
運算符重載實例
格式為
函數類型 operator 運算符(形參表) { 函數體; }?
ostream &operator<<(ostream & output,類名 &對象名) { return output; }output是類ostream對象的引用,它是cout的別名,即ostream&output=cout。調用參數時,output引用cout(即cout的別名)。顯然,插入符函數的第2個參數使用引用方式比直接使用對象名的可讀性要好一些
類運算符和友元運算符的區別
如果運算符所需的操作數(尤其是第一個操作數)希望進行隱式類型轉換,則運算符應通過友元來重載。另一方面,如果一個運算符的操作需要修改類對象的狀態,則應當使用類運算符,這樣更符合數據封裝的要求。但參數是引用還是對象,則要根據運算符在使用中可能出現的情況來決定。 ?如果對象作為重載運算符函數的參數,則可以使用構造函數將常量轉換成該類型的對象。如果使用引用作為參數,因為這些常量不能作為對象名使用,所以編譯系統就要報錯。
轉載于:https://www.cnblogs.com/aeolian/p/7690484.html
總結
以上是生活随笔為你收集整理的C++运算符重载(10)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用FormData进行Ajax请求异步
- 下一篇: 【转】C++调用Matlab的.m文件