标签:运算符重载 友元函数
今天看到流运算符重载的时候有几个疑问,一是为何在只需声明一次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; }
本文出自 “11451404” 博客,请务必保留此出处http://11461404.blog.51cto.com/11451404/1837733
标签:运算符重载 友元函数
原文地址:http://11461404.blog.51cto.com/11451404/1837733