操作符的過載有一定的規則,而io操作符必須過載為普通函式,且應該宣告為類的友元函式。我試了,非友元也可以,但是必須提供訪問成員變數的函式,所以,出於效率的考慮還是應該定義為友元。
規則如下:
1. 過載操作符必須具有乙個類型別或列舉型別運算元。這條規則強制過載操作符不能重新定義用於內建型別物件的操作符的含義。
如: int operator+(int, int), 不可以
2. 為類設計過載操作符的時候,必須選擇是將操作符設定為類成員還是普通非成員函式。在某些情況下,程式沒有選擇,操作符必須是成員;在另外一些情況下,有些經驗可以指導我們做出決定。下面是一些指導:
a. 賦值(=),下標(),呼叫(())和成員訪問箭頭(->)等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。
b. 像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。
c. 改變物件狀態或與給定型別緊密聯絡的其他一些操作符,如自增,自減和解引用,通常應定義為類成員。
d 對稱的操作符,如算術操作符,相等操作符,關係操作符和位操作符,最好定義為普通非成員函式。
e io操作符必須定義為非成員函式,過載為類的友元。
1 #include 2using
namespace
std;34
class
test
512 test(int x, int
y)13
17void setx(const
intx)
1821
int getx() const
2225
26void sety(const
inty)
2730
int gety() const
3134
private:35
intx, y;
36};
3738 ostream &operator
<<(ostream &out, const test &t)
3943 istream &operator >>(istream &in, test &t)
4450
51int main(void)52
在主函式中簡單的測試了一下。成功寫入並讀取。
C 過載IO操作符
操作符的過載有一定的規則,而io操作符必須過載為普通函式,且應該宣告為類的友元函式。我試了,非友元也可以,但是必須提供訪問成員變數的函式,所以,出於效率的考慮還是應該定義為友元。規則如下 1.過載操作符必須具有乙個類型別或列舉型別運算元。這條規則強制過載操作符不能重新定義用於內建型別物件的操作符的含...
C 操作符過載
1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...
C 過載操作符
過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...