<<输出运算符重载
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的引用,即就是它自己,它可以再次作为左值。因而能够连着写这个输出流 |
相关文章推荐
- 《C++第九周实验报告2-1》---接第8周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出
- cout 堆栈,operator<< 运算符重载输出问题
- C++中输入输出<< 和>>重载,以便适应输出输入一个对象
- 《Windows程序设计》读书笔记------------->>文字输出——多行文字<<
- OJ第三批——Problem J:C++复数运算符重载(+与<<)
- 相对printf(),对于多线程的cout<<输出乱码的问题
- 2-3.输入正整数n <= 20,输出一个n层的正三角形
- 九周任务二:定义Time类中的<<和>>运算符重载,实现时间的输入输出
- C++,重载输出操作符<<, cout.operator()是什么东东?
- <四> H264解码输出yuv文件
- * 运算符重载 编程题#4:大整数的加减乘除(Coursera 程序设计与算法;重载:& operator <<, & operator >>, +, -, *, /)
- 输入一个整数,如果该整数x符合条件:-1<x<10,则输出“ok”,否则输出“not ok”
- 用二维数组,输出有一门以上课程未及格的学生,并打印出所有<60分的分数及各科成绩
- 第九周试验任务1--定义Time类中的<<和>>运算符的重载,实现输入和输出。
- 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载
- 第8周-项目3-分数类中的运算符重载(续)-++、--、>>、<<
- 项目二-Time类定义Time类中的<<和>>运算符重载
- C/C++:智能指针原理(运算符重载)、使用auto_ptr<A>
- C++ primer(十一)--运算符重载、友元函数、转换、重载<<运算符
- 请写出一个程序,对于一个m行,m列的(1<m<10)的方阵,求其每一行,每一列及 主对角线元素之和,最后按照从大到小的顺序依次输出