关于操作符<<重载的问题
class Time
{
private :
int hours ;
int minutes ;
public :
Time();
Time( int h = 0 , int m = 0 );
void reset (){ hours = minutes = 0;}
friend Time operator+( const Time & a , const Time & b ); //定义了时间加法
friend std::ostream & operator < <( std::ostream & s , const Time & t ); //可以用cout输出时间
};
重载+后,可以直接进行时间加法.如Time的对象t1,t2,t3,可以:
t3 = t1+t2;
相当于 t3=t1.operator+(t2);
那么 < <,应该是cout < <(cout,t4),就是cout.operator(cout,t4),这样输出是正常的。
可为什么cout < <t4也可以呢?cout是调用对象而不是参数呀?参数在 < <右边呀?
[解决办法]
这个理解是错的:
那么 < <,应该是cout < <(cout,t4),就是cout.operator(cout,t4),这样输出是正常的。
[解决办法]
cout < < "Time " < <T4;
相当于
operator < <(operator < <(cout, "Time "),t4);//函数的链式调用,operator < <返回cout的引用
[解决办法]
链式调用
[解决办法]
friend const Time operator+( const Time & a , const Time & b )
//返回const类型 防止 time1+time2=time3的情况
time1=time2+time3时,
Time operator+(const Time & t)const 要求time2为Time类型,
而如果加号重载为friend const Time operator+( const Time & a , const Time & b ),
则time2可以不为Time类型,为字符串或其他类型也可以,只要有构造函数可以将time2转成Time类型就可以了,系统会自动转换。
[解决办法]
对于操作符重载,C++规定就是这样的,+是2元操作符,当t1+t2时,Time operator+(const Time & t)const会转成t1.operator +(t2)的形式,对于其他的操作符,如(),[]具体形式其实都是由内定的重载形式的。