您好,登錄后才能下訂單哦!
今天看到流運(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; }
免責(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)容。