您的位置:首页 > 其它

<<输出运算符重载

2012-03-07 13:47 232 查看
<<输出运算符重载
//重载输出运算符"<<"

#include <iostream.h> //有些编译系统可能是包含iostream,并指明名字空间std;

class CComplex

{

public:

CComplex(){ real = 0.0; image = 0.0; }

CComplex(double rv) { real = rv; image = 0.0; }

CComplex(double rv,double iv) { real = rv; image =iv;}

friend CComplex operator + (CComplex c1,CComplex c2);

//作为类的友元函数,重载加运算符,

friend ostream& operator<<(ostream& stream,CComplex c);

//重载输出运算符"<<"

~CComplex() {};

private:

double real; //复数的实部

double image; //复数的虚部

};

CComplex operator +( CComplex c1,CComplex c2)

{

CComplex temp;

temp.real = c1.real + c2.real;

temp.image = c1.image + c2.image;

return temp;

}

ostream& operator<<(ostream &stream, CComplex c)

{

stream<<"("<<c.real<<"+"<<c.image<<"i)"<<endl;

//以(a+bi)的格式输出复数

return stream;

}

int main( )

{

CComplex c1(1,5),c2(3);

cout<<"c1="<<c1; //使用重载输出运算符"<<",输出复数c1

cout<<"c2="<<c2; //使用重载输出运算符"<<",输出复数c2

c1 = c2+16;

cout<<"执行语句c1 = c2+16;之后,";

cout<<"c1="<<c1;

return 0;

}

====================================================

不知为何这个程序using namespace std;不能用,只能用#include <iostream.h>

======================================================

int main()后必须跟return 0;如果是void main()则不用跟,但是新的C++编译器只支持int main(),因此为了移植性,最好用int main()和return 0;

经测试,即使没有return 0编译也可通过,但是编译系统会有警告。

要么void main(),要么int main() return 0;另经测试,直接main() return0;也可通过。

=======================================================

ostream& operator << (ostream& stream, CComplex c)

而不写成

ostream operator << (ostream& stream, CComplex c)

???????????????????????????????????????????????

如果写成这样

ostream operator << (ostream& stream, CComplex c)则:

Point a, b;

cout<<a<<b;

错误,只能写为:

cout<<a;

cout<<b;

原因在于

cout<<a<<b;

相当于:

(cout<<a)<<b;

第一个()中返回cout的临时变量,它可以不可以作为左值。因而错误。

如果写成:

ostream& operator <<(ostream& stream, CComplex c)则:

cout<<a<<b;

正确,因为它等同于

(cout<<a)<<b;

(acout<<a)返回cout的引用,即就是它自己,它可以再次作为左值。因而能够连着写这个输出流

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐