流运算符为什么不能通过类的成员函数重载

因为通过类的成员函数重载必须是运算符的第一个是自己, 
而对流运算的重载要求第一个参数是流对象。 
一般通过友元来解决。

	void operator<<(ostream& out)
	{
 
			out << _year << "-" << _month << "-" << _day << endl;
	}

因为函数的第一个参数是this指针,第二个参数才是我们传进去的 out,但是这与std中的cout使用习惯完全不符,我们的所打印变量是应该在cout的右边,如  cout<<d<<endl.

这样的重载和普通的函数没有两样,也就失去了重载函数的目的所在。

那么这样,我们便不可以把输出运算符的重载写成成员函数,写成成员函数去实现功能,能实现功能 但失去重载本身的意义。

那么我们将输出运算符的重载

那么我们在类外写重载函数,此时输出运算符的重载函数是一个全局的。
 

void operator<<(ostream& out,const Date& d)
{
 
	out << d._year << "-" << d._month << "-" << d._day << endl;
}

然后在对应的类中使用友元

猜你喜欢

转载自blog.csdn.net/weixin_41066529/article/details/89674192
今日推荐