C++ 重載 << 和 >> 運算符


流提取運算符(>>)和流插入運算符(<<)可以被重載用於輸入輸出操作。

注意,我們到目前為止,必須調用toString() 函數返回一個表示Rational對象的字符串,再把它顯示出來。例如,為了顯示Rational 對象r,要編寫一下代碼:

//形式1
cout << r.toString();

而不能直接使用:

//形式2
cout << r;

但我們平時見到的int、double、string類型都可以直接使用 << 和 >> 運算符,所以我們來重載一下。

上面的形式2等同於:

<< (cout, r)
//或者
operator << (cout, r)

運算符 << 有兩個操作數,即cout和r,分別是ostream類的實例,和Rational類的實例。因此,cout不能作為Rational類的成員函數被重載,所以我們把它聲明為Rational類的友元函數(詳見C++ 訪問私有成員——友元函數和友元類

friend ostream& operator<<(ostream& out, const Rational rational);

實現:

ostream& operator<<(ostream& out, const Rational rational) {
    out << rational.numerator << "/" << rational.denominator;
    return out;
}

同理,重載 >> 運算符時也要聲明為友元函數

friend istream& operator>>(istream& in, Rational& rational);

實現(注意添加頭文件<iostream>,因為cout在<iostream>中):

istream& operator>>(istream& in, Rational& rational) {
    cout << "Enter numerator: ";
    in >> rational.numerator;

    cout << "Enter denominator: ";
    in >> rational.denominator;

    return in;
}

測試:

#include <iostream>
#include "Rational.h"

using namespace std;

int main()
{
    Rational r1, r2;

    cout << "第1個有理數" << endl;
    cin >> r1;

    cout << "第2個有理數" << endl;
    cin >> r2;

    cout << "r1 = " << r1 << "\nr2 = " << r2 << endl;

    return 0;
}

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM