C++重载IO操作符
操作符的重載有一定的規則,而IO操作符必須重載為普通函數,且應該聲明為類的友元函數。我試了,非友元也可以,但是必須提供訪問成員變量的函數,所以,出于效率的考慮還是應該定義為友元。
規則如下:
1.? 重載操作符必須具有一個類類型或枚舉類型操作數。這條規則強制重載操作符不能重新定義用于內置類型對象的操作符的含義。
??? 如: int operator+(int, int), 不可以???
2. ?為類設計重載操作符的時候,必須選擇是將操作符設置為類成員還是普通非成員函數。在某些情況下,程序沒有選擇,操作符必須是成員;在另外一些情況下,有些經驗可以指導我們做出決定。下面是一些指導:
?? a. 賦值(=),下標([]),調用(())和成員訪問箭頭(->)等操作符必須定義為成員,將這些操作符定義為非成員函數將在編譯時標記為錯誤。
? b. 像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。
? c. 改變對象狀態或與給定類型緊密聯系的其他一些操作符,如自增,自減和解引用,通常應定義為類成員。
? d 對稱的操作符,如算術操作符,相等操作符,關系操作符和位操作符,最好定義為普通非成員函數。
? e io操作符必須定義為非成員函數,重載為類的友元。
1 #include <iostream> 2 using namespace std; 3 4 class Test 5 { 6 public: 7 Test() 8 { 9 x = 0; 10 y = 0; 11 } 12 Test(int x, int y) 13 { 14 this->x = x; 15 this->y = y; 16 } 17 void setX(const int x) 18 { 19 this->x = x; 20 } 21 int getX() const 22 { 23 return x; 24 } 25 26 void setY(const int y) 27 { 28 this->y = y; 29 } 30 int getY() const 31 { 32 return y; 33 } 34 private: 35 int x, y; 36 }; 37 38 ostream &operator <<(ostream &out, const Test &t) 39 { 40 out << t.getX() << t.getY(); 41 return out; 42 } 43 istream &operator >>(istream &in, Test &t) 44 { 45 int x = 0, y = 0; 46 in >> x >> y; 47 t = Test(x, y); 48 return in; 49 } 50 51 int main(void) 52 { 53 Test t(4, 5); 54 cout << t << endl; 55 56 cin >> t; 57 cout << t << endl; 58 59 return 0; 60 }在主函數中簡單的測試了一下。成功寫入并讀取。
轉載于:https://www.cnblogs.com/lit10050528/p/3907592.html
總結
以上是生活随笔為你收集整理的C++重载IO操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu下安装Node.js(源码安
- 下一篇: QT中循环显示图片和简单的显示图片