重載<<、>>運算子

重載<<、>>運算子,可以讓<<、>>擁有輸出、輸入自定物件資料的能力,其方法與重載其它運算子類似,重載<<運算子時,第一個參數是ostream型態的參數,第二個參數是要輸出的物件,實作時指定輸出的資訊,重載>>運算子的方式也類似,第一個參數是istream型態的參數,第二個參數是要輸入的物件,實作時指定輸入的資訊。

通常重載<<、>>運算子時,會使用friend函式,這是因為它不是一個成員函式,使用此方式可以讀取private的成員變數,假使不使用friend函式重載也可,但是只能操作public的成員變數。

#include <iostream> 
using namespace std;

class Point {
private:
    int m_x;
    int m_y;
public:
    Point();
    Point(int x, int y);

    friend ostream &operator<<(ostream &s, Point p);
    friend istream &operator>>(istream &s, Point &p);
};
Point::Point(){
    m_x = 0;
    m_y = 0;
}
Point::Point(int x, int y){
    m_x = x;
    m_y = y;
}

ostream &operator<<(ostream &s, Point p) {
    s << "(" << p.m_x << ", " << p.m_y << ")";
    return s;
}
istream &operator>>(istream &s, Point &p) {
    cout << "輸入點座標: ";
    s >> p.m_x >> p.m_y;
    return s;
}

int main() {
    Point p1(1, 3);
    cout << p1 << endl;

    Point p2;
    cin >> p2;
    cout << p2 << endl;

    system("PAUSE");
    return 0;
}