1.输出运算符重载声明方法:
ostream& operator<< (ostream &, const Test &);
因为ostream对象是不支持复制的,所以第一个参数和返回的参数均是引用。第二个参数是操作对象,为了避免传入对象时发生对象的复制(即调用复制构造函数),这里也使用引用。又为了避免修改这个对象,所以使用const限定。
2.输入运算符重载声明方法:
istream& operator>> (istream &, Test &);
同上理,istream是不支持复制的,所以这里均使用引用,第二个参数使用引用也是为了避免复制发生。
全局的观察上述两个声明,可以发现,每个参数和返回都是引用,这个原因上面已经解释了。
3.输出运算符重载定义方法:
ostream& operator<< (ostream &out, const Test &test){
out << "value = " << test.value << endl;
return out;
}
可以看到,函数体内用来做输出的是第一个形参out,而不是cout,这里要搞清楚了。返回的依旧是一个ostream,这样就可以接着输出了,才支持下面的使用方法:
cout << test << endl;
输出了test后紧接着输出endl,如果不返回ostream对象,这样的使用就不成立。
4.下面是一个代码示例:
#include <iostream.h>
//using namespace std;
class Test{
public:
Test(){value = 0;}
Test(const Test&){}
Test operator= (const Test&){}
~Test(){}
friend ostream& operator<< (ostream &, const Test &);
friend istream& operator>> (istream &, Test &);
//private:
int value;
};
ostream& operator<< (ostream &out, const Test &test){
out << "value = " << test.value << endl;
return out;
}
istream& operator>> (istream &in, Test &test){
cout << "input value:";
in >> test.value;
return in;
}
void main()
{
Test test;
cin >> test;
cout << test << endl;
}