今天看到流运算符重载的时候有几个疑问,一是为何在只需声明一次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;
}
转载于:https://blog.51cto.com/11461404/1837733