歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++ 操作符重載

C++ 操作符重載

日期:2017/3/1 10:08:16   编辑:Linux編程

1. 通過操作符重載,程序員能針對類類型的操作數定義不同的操作符版本。

2. 重載操作符是具有特殊名稱的函數:保留字operator後接需定義的操作符符號。
重載操作符的形參數目(包括this指針)要與操作符的操作數數目相同。例如:二元操作符則需要兩個形參;一元操作符只需要一個形參。

3. 重載操作符必須具有至少一個類類型或枚舉類型的操作數。這條規則強制重載操作符不能重定義用於內置類型對象的操作符的含義。

4. 成員函數和非成員函數:1)當重載操作符是成員函數,有隱含的this指針,形參數目會比操作數少一個 2)當重載操作符不是成員函數,沒有this指針,形參數目與操作數個數相同。

5. 使用重載操作符:
1)obj1 + obj2 2)operator+(obj1, obj2) 3)使用成員操作符:obj1.operator+(obj2) 其中,this指針指向obj1

6. 對於系統的所有操作符,一般情況下,只支持基本數據類型和標准庫中提供的class,對於用戶自己定義的class,如果想支持基本操作,比如比較大小,判斷是否相等,等等,則需要用戶自己來定義關於這個操作符的具體實現。
那麼為什麼叫重載呢?這是因為,在編譯器實現的時候,已經為我們提供了這個操作符的基本數據類型實現版本,但是現在他的操作數變成了用戶定義的數據類型class,所以,需要用戶自己來提供該參數版本的實現。

7. 重載==後,考慮如下的if語句:
  if(10==p1) cout<<”the age is equal!”  是否會正確執行呢?
  答案是不會的,因為只有左操作數是該類類型的對象時,才會考慮作為類成員重載操作符。因為10不是person類型的對象,所以,不能調用classperson的重載操作符==。
  考慮如下if語句:
  if(person(10)==person(11))
   cout<<"ok"  

是否能夠正確執行呢?答案是可以,因為操作符兩邊均是無名對象。

Copyright © Linux教程網 All Rights Reserved