当要用到cout<<类时,编译器会报错,此时就需要程序员自己对左移操作符进行重载了:
左移操作符重载的实例:
class operatorcg{
friend ostream& operator<< (ostream& output, operatorcg& oop);
private:
int a;
int b;
public:
void SetValue(int a, int b)
{
this->a = a;
this->b = b;
}
};
ostream& operator<< (ostream& output, operatorcg& oop)
{
output << "oop.a=" << oop.a << " b=" << oop.b << endl;
return output;
}
int main(void)
{
operatorcg oop;
oop.SetValue(10, 15);
cout << oop;
system("pause");
return 0;
}
左移操作符重载:
void operator<< (ostream& output, operatorcg& oop)
{
output << "oop.a=" << oop.a << " b=" << oop.b << endl;
//return output;
}
这种重载方式无法链式输出,
只是用与cout << oop这种输出一个对象的情况,要是输出多个对象就必须对操作符重载函数进行相应的改变;
ostream& operator<< (ostream& output, operatorcg& oop)
{
output << "oop.a=" << oop.a << " b=" << oop.b << endl;
return output;
}
这与结论“
函数返回值当左值必须要返回一个引用”有关
例如:cout<<oop1<<oop2<<endl;
如果用第一种则变形成cout<<oop1<<void<<endl;所以编译器会报错;