您的位置:首页 > 编程语言 > C语言/C++

C++输入输出运算符重载注意事项

2013-04-10 09:26 197 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: