溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

輸出流運(yùn)算符的重載疑點(diǎn)

發(fā)布時(shí)間:2020-07-21 09:36:21 來(lái)源:網(wǎng)絡(luò) 閱讀:460 作者:433個(gè)字符 欄目:編程語(yǔ)言


今天看到流運(yùn)算符重載的時(shí)候有幾個(gè)疑問,一是為何在只需聲明一次friend即可,而不是在兩個(gè)類之間都使用friend,二是為何不能重載為成員函數(shù)。


第一個(gè)問題:都使用friend,函數(shù)需要訪問兩個(gè)類的私有成員

第二個(gè)問題:重載為了成員函數(shù),但應(yīng)用上出現(xiàn)了問題,詳情見代碼。




using std::ostream;
class a
{
public:


    ostream& operator<< (ostream & out)
    {
        out << x << y;
        return out;
    }
    
    

    friend ostream & operator<<(a & rhs, ostream & xout)
    {
        xout << rhs.x << rhs.y;
        return xout;
    }
    
    


    a(int s = 0, int q = 1)
        :x(s), y(q)        {    }

private:
    int x;
    int y;

};




int main()
{
        a b;
//     b.operator<<(std::cout);     //類的成員流運(yùn)算符
//     std::cout << b;          //friend 流運(yùn)算符重載
//     b << std::cout;          //friend 流運(yùn)算符重載 或 成員流運(yùn)算符的另一種形式
//     operator<<(b, std::cout);     //普通函數(shù)


    /*第一種<<的實(shí)現(xiàn)對(duì)1,3輸出均適用,
    1.  作為a類的成員函數(shù)
    2.  1不可以寫為2
    3.  1可以寫為3
    4.  operator<< 函數(shù)未實(shí)現(xiàn)
    
    第二種<<的實(shí)現(xiàn)對(duì)3,4適用
    1. operator<<是普通函數(shù),而非a的成員函數(shù)
    2. 位置反了
    3. 使用流運(yùn)算符時(shí),第一個(gè)參數(shù)在前
    4. 普通函數(shù)的使用,函數(shù)名加參數(shù)
    */
    return 0;
}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI