c++ operator 重載運算符 簡單理解

operator是C++的關鍵字,它和運算符一起使用,表示一個運算符函數,理解時應將 operator== 整體上視爲一個函數名。

這是C++擴展運算符功能的方法,雖然樣子古怪,但也可以理解:一方面要使運算符的使用方法與其原來一致,另一方面擴展其功能只能通過函數的方式(c++中,“功能”都是由函數實現的)。

一、爲什麼使用操作符重載?
對於系統的所有操作符,**一般情況下,只支持基本數據類型和標準庫中提供的class,對於用戶自己定義的class,如果想支持基本操作,比如比較大小,判斷是否相等,等等,則需要用戶自己來定義關於這個操作符的具體實現。**比如,判斷兩個人是否一樣大,我們默認的規則是按照其年齡來比較,所以,在設計person 這個class的時候,我們需要考慮操作符==,而且,根據剛纔的分析,比較的依據應該是age。**那麼爲什麼叫重載呢?**這是因爲,在編譯器實現的時候,已經爲我們提供了這個操作符的基本數據類型實現版本,但是現在他的操作數變成了用戶定義的數據類型class,所以,需要用戶自己來提供該參數版本的實現。

二、如何聲明一個重載的操作符?
A: 操作符重載實現爲類成員函數
重載的操作符在類體中被聲明,聲明方式如同普通成員函數一樣,只不過他的名字包含關鍵字operator,以及緊跟其後的一個c++預定義的操作符。
可以用如下的方式來聲明一個預定義的== 操作符:
class person{
private:
int age;
public:
person(int a){
this->age=a;
}
inline bool operator == (const person &ps) const;
};
實現方式如下:
inline bool person::operator==(const person &ps) const
{
if (this->age==ps.age)
return true;
return false;
}
調用方式如下:
#include
using namespace std;
int main()
{

person p1(10);
person p2(20);
if(p1== p2) cout<<”the age is equal!”< return 0;
}
這裏,因爲operator== 是class person的一個成員函數,所以對象p1,p2都可以調用該函數,上面的if語句中,相當於p1調用函數==,把p2作爲該函數的一個參數傳遞給該函數,從而實現了兩個對象的比較。

輸入輸出流重載 ostream& istream&

C++的流插入運算符“<<”和流提取運算符“>>”是C++在類庫中提供的,所有C++編譯系統都在類庫中提供輸入流類istream和輸出流類ostream。cin和cout分別是istream類和ostream類的對象。在類庫提供的頭文件中已經對“<<”和“>>”進行了重載,使之作爲流插入運算符和流提取運算符,能用來輸出和輸入C++標準類型的數據。因此,凡是用“cout<<”和“cin>>”對標準類型數據進行輸入輸出的,都要用#include 把頭文件包含到本程序文件中。

用戶自己定義的類型的數據,是不能直接用“<<”和“>>”來輸出和輸入的。如果想用它們輸出和輸入自己聲明的類型的數據,必須對它們重載。

對“<<”和“>>”重載的函數形式如下:
istream & operator >> (istream &, 自定義類 &);
ostream & operator << (ostream &, 自定義類 &);
即重載運算符“>>”的函數的第一個參數和函數的類型都必須是istream&類型,第二個參數是要進行輸入操作的類。重載“<<”的函數的第一個參數和函數的類型都必須是ostream&類型,第二個參數是要進行輸出操作的類。因此,只能將重載“>>”和“<<”的函數作爲友元函數或普通的函數,而不能將它們定義爲成員函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章