您好,登錄后才能下訂單哦!
今天看到流運算符重載的時候有幾個疑問,一是為何在只需聲明一次friend即可,而不是在兩個類之間都使用friend,二是為何不能重載為成員函數。
第一個問題:都使用friend,函數需要訪問兩個類的私有成員
第二個問題:重載為了成員函數,但應用上出現了問題,詳情見代碼。
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); //普通函數 /*第一種<<的實現對1,3輸出均適用, 1. 作為a類的成員函數 2. 1不可以寫為2 3. 1可以寫為3 4. operator<< 函數未實現 第二種<<的實現對3,4適用 1. operator<<是普通函數,而非a的成員函數 2. 位置反了 3. 使用流運算符時,第一個參數在前 4. 普通函數的使用,函數名加參數 */ return 0; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。