c++ operator 提取流操作符问题。
发布网友
发布时间:2023-10-17 23:12
我来回答
共1个回答
热心网友
时间:2023-12-02 13:48
首先,ostream 是一个类,
我们经常会写:cout << a << b;
那么执行了 cout << a之后为什么能执行输出b??
因为cout << a 这个函数调用结束返回了一个(非const)对象(类型为ofstream&)。
所以能继续输出B。
因此,为了让重载的<< 操作符和我们的习惯一致,
必须:ostream& operator << (....); 这就是返回引用的原因,简单说就是为了连续输出。
同样道理: 比如有个类A
A a, b, c;
a = b = c;
这里用到了连续的“=”,同理,重载“=”应该这样写:
A& operator = (const A& b)
{
*this = b;
return *this;
}
至于为什么传递ostream&,因为要返回一个ostream&!,如果不传递,只能:
return ostream();//即返回了局部对象,明显错误。
或者返回一个new出来的对象。内存泄露。
z最后说为什么cout.operator << (d3);错误
因为只有operator << 是cout 的成员函数才能通过“." 调用。但是这里不是他的成员函数,是一个全局函数(你不可能为系统的类写他的成员函数吧?);
所以可以这样写:
operator << (std::cout, d3);
这就和fun( a, b) 格式一样的。