
18.類中重載運算符與友元
上次節中學習了如何在類中重新定義賦值(=)運算符,實際上在一個自定義類中除了賦值(=)運算符外,類的對象是不可以直接使用運算符的,比如你在main函數中寫這樣的代碼會報錯:

如果想解決這些報錯問題,需要在類中重載這些運算符。
18.1 重載
在表達式中使用
首先在類中聲明要重載的運算符:< ,然后去函數中實現具體的比較規則。

聲明重載運算符函數的代碼要求按照固定的格式:必須在運算符
18.2 重載+運算符
如同上面的

18.3 重載<>運算符
之前我們可以使用C++ 的流提取運算符 >> 和流插入運算符 << 來輸入和輸出內置的一些數據類型,實際上我們也可以重載流提取運算符和流插入運算符來操作自定義的數據類型。
在這里,有一點很重要,我們需要把運算符重載函數聲明為類的友元函數,這樣我們就能不用創建對象而直接調用函數了。


重載運算符之后,在main函數中直接通過cout輸出對象的數據,或cin輸入對象的數據。

18.4 友元函數
類的private的成員只有類的成員函數才有權直接訪問,外部函數無訪問權限。但是類中有一種特殊的函數——友元函數,有權訪問類的所有私有(private)成員和保護(protected)成員。盡管友元函數在類的定義中出現過,但友元函數并不是類的成員函數。
如果要聲明一個函數為類的友元函數,需要在類定義中使用關鍵字 friend,函數的參數必須有一個類對象參數,因為只有通過對象才能訪問私有或保護的成員:

18.5 友元類
友元也可以是一個類,該類被稱為友元類。如果聲明一個類為友元,那整個友元類的所有成員都是這個類的友元。
如果要聲明友元類,需要在類定義中使用關鍵字 friend,如下所示:

友元類的任何成員函數都可以訪問類的成員。
