先说左移(<<)操作符,也就是我们常说的输出操作符。
对于自定义类来说,重载左移操作符的方法我们常使用类的友元方式进行操作。
示例代码如下:
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include<iostream>
usingnamespacestd;
classTest
{
public:
Test(intage=0,char*name="")
{
Test::age=age;
strcpy(Test::name,name);
}
voidoutmembers(ostream&out)
{
out<<"Age:"<<age<<endl<<"Name:"<<this->name<<endl;
}
friendostream&operator<<(ostream&,Test&);
protected:
intage;
charname[50];
};
ostream&operator<<(ostream&out,Test&temp)
{
temp.outmembers(out);
returnout;
}
intmain()
{
Testa(24,"管宁");
cout<<a;
system("pause");
}上例代码中,我们对void outmembers(ostream &out)的参数使用ostream定义主要是为了可以向它传递任何ostream类对象不光是cout也可以是ofstrem或者是ostrstream和ostringstream类对象,做到通用性。
重载运算符,我们知道可以是非成员方式也可以是成员方式的,对于<<来说同样也可以是成员方式,但我十分不推荐这么做,因为对于类的成员函数来说,第一个参数始终是会被隐藏的,而且一定是当前类类型的。
下面的示例代码就是将上面的<<重载函数修改成成员方式的做法:
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include<iostream>
usingnamespacestd;
classTest
{
public:
Test(intage=0,char*name="")
{
Test::age=age;
strcpy(Test::name,name);
}
voidoutmembers(ostream&out)
{
out<<"Age:"<<age<<endl<<"Name:"<<this->name<<endl;
}
ostream&operator<<(ostream&out)
{
this->outmembers(out);
returnout;
}
protected:
intage;
charname[50];
};
intmain()
{
Testa(24,"管宁");
a<<cout;
system("pause");
}从代码实现上,我们将函数修改成了ostream& operator <<(ostream &out),迫不得已将ostream类型的引用参数放到了后面,这是因为,成员方式运算符重载函数第一个参数会被隐藏,而且一定是当前类类型的,这和ostream类型冲突了。由此我们在使用cout输出的时候就必须写成a<<cout;,这样一来代码的可读行就大大降低了,这到底是左移还是右移呢?为此我再一次说明,对于左移和右移运算符的重载是十分不推荐使用成员函数的方式编写的。
转载保留:http://www.qqread.com/cpp/p351499.html相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- C/C++技术专题 (1640篇文章)
- 在Ubuntu 7.10中用终端编译运行C++程序 (0次浏览)
- C与C++在Linux下的集成问题 (0次浏览)
- 浅析C++中虚函数的调用及对象内部布局 (0次浏览)
- 在C++中实现四种进程或线程同步互斥的控制 (0次浏览)
- Ubuntu下面的C语言代码检查工具 Splint (0次浏览)



