今天看到流运算符重载的时候有几个疑问,一是为何在只需声明一次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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。