今天看到流運算符重載的時候有幾個疑問,一是為何在只需聲明一次friend即可,而不是在兩個類之間都使用friend,二是為何不能重載為成員函數(shù)。
創(chuàng)新互聯(lián)建站專注于鎮(zhèn)寧企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。鎮(zhèn)寧網(wǎng)站建設(shè)公司,為鎮(zhèn)寧等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
第一個問題:都使用friend,函數(shù)需要訪問兩個類的私有成員
第二個問題:重載為了成員函數(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); //類的成員流運算符 // std::cout << b; //friend 流運算符重載 // b << std::cout; //friend 流運算符重載 或 成員流運算符的另一種形式 // operator<<(b, std::cout); //普通函數(shù) /*第一種<<的實現(xiàn)對1,3輸出均適用, 1. 作為a類的成員函數(shù) 2. 1不可以寫為2 3. 1可以寫為3 4. operator<< 函數(shù)未實現(xiàn) 第二種<<的實現(xiàn)對3,4適用 1. operator<<是普通函數(shù),而非a的成員函數(shù) 2. 位置反了 3. 使用流運算符時,第一個參數(shù)在前 4. 普通函數(shù)的使用,函數(shù)名加參數(shù) */ return 0; }