輸入輸出運算符重載


C++能夠使用流提取運算符>>和流插入運算符<< 來輸入輸出內置數據類型,也可以重載流提取運算符和流插入運算符來操作對象等用戶自定義的數據類型。

我們有時需要把運算符重載函數聲明為類的友元函數,這樣我們就能不用構造對象而直接調用函數。

/***
inputOver.cpp
***/
#include<iostream>
using namespace std;

class Distance
{
    private:
        int feet;
        int inches;
    public:
        Distance()
        {
            feet = 0;
            inches = 0;
        }
        Distance(int f,int i)
        {
            feet = f;
            inches = i;
        }

        friend ostream &operator<<(ostream &output,const Distance &D)
        {
            output << "F: " << D.feet << " I: " << D.inches;
            return output;
        }
        friend istream &operator>>(istream &input,Distance &D)
        {
            input >> D.feet >> D.inches ;
            return input;
        }
};

int main()
{
    Distance D1(11,10),D2(5,11),D3;
    cout << "Enter the value of object : " << endl;
    cin >> D3;
    cout << "First Distance : " << D1 << endl;
    cout << "Second Distance : " << D2 << endl;
    cout << "Third Distance : " << D3 << endl;
    return 0; 
}

運行結果:

exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ inputOver.cpp -o inputOver

exbot@ubuntu:~/wangqinghe/C++/20190808$ ./inputOver

Enter the value of object :

70 10

First Distance : F: 11 I: 10

Second Distance : F: 5 I: 11

Third Distance : F: 70 I: 10

 

如果將重載程序寫成成員函數形式,會是以d1 << cout的形式輸出數據。

/***
memberOver.cpp
***/
#include<iostream>
using namespace std;

class Distance
{
    private:
        int feet;
        int inches;
    public:
        Distance()
        {
            feet = 0;
            inches = 0;
        }
        Distance(int f,int i)
        {
            feet = f;
            inches = i;
        }

        ostream &operator<<(ostream &os)
        {
            os << "F: " << feet << " I: " << inches << endl;
            return os;
        }
};

int main()
{
    Distance d1(20,18);
    d1 << cout;
    return 0; 
}

運行結果:

exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ memberOver.cpp -o memberOver

exbot@ubuntu:~/wangqinghe/C++/20190808$ ./memberOver

F: 20 I: 18


免責聲明!

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



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