第四章 运算符重载(2)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

4.7重载流插入运算符和流提取运算符istream和ostream是C++的预定义流类cin是istream的对象,cout是ostream的对象运算符由ostream重载为插入操作,用于输出基本类型数据运算符由istream重载为提取操作,用于输入基本类型数据用友员函数重载和,输出和输入用户自定义的数据类型重载函数原型的格式如下:istream&operator(istream&,自定义类&);ostream&operator(ostream&,自定义类&);重载函数原型的格式如下:istream&operator(istream&,自定义类&);ostream&operator(ostream&,自定义类&);第一个参数和函数类型都必须为istream&或者ostream&类型重载函数原型的格式如下:istream&operator(istream&,自定义类&);ostream&operator(ostream&,自定义类&);第二个参数是要进行输入输出操作的类重载函数原型的格式如下:istream&operator(istream&,自定义类&);ostream&operator(ostream&,自定义类&);注意:从格式上看出,重载函数和重载函数只能定义为友元函数,不能定义为成员函数,因为函数有两个形参,并且第一个形参不是自定义类型。4.7.1重载流插入运算符“”重载函数格式:friendostream&operator(ostream&,Complex&);在类外定义友元函数:ostream&operator(ostream&output,Complex&c)//用重载的“”实现复数的输出#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator(ostream&,Complex&);private:doublereal,imag;};ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator(ostream&output,Complex&c){output(c.real+c.imagi)endl;returnoutput;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}//用重载的“”实现复数的输出#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator(ostream&,Complex&);private:doublereal,imag;};ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator(ostream&output,Complex&c){output(c.real+c.imagi)endl;returnoutput;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}friendostream&operator(ostream&,Complex&);ostream&operator(ostream&output,Complex&c){output(c.real+c.imagi)endl;returnoutput;}说明:运算符重载函数第一个参数和函数的类型必须是ostream类型的引用,目的是为了返回cout的当前值,以便连续输出。返回输出流现状//用重载的“”实现复数的输出#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator(ostream&,Complex&);private:doublereal,imag;};ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator(ostream&output,Complex&c){output(c.real+c.imagi)endl;returnoutput;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}编译器解释为:operator(cout,c3);//用重载的“”实现复数的输出#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator(ostream&,Complex&);private:doublereal,imag;};ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator(ostream&output,Complex&c){output(c.real+c.imagi)endl;returnoutput;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}编译器解释为:operator(cout,c3);运行结果:c3=(8+-6i)};//用重载的“”实现复数的输出#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator(ostream&,Complex&);private:doublereal,imag;};ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator(ostream&output,Complex&c){output(c.real+c.imagi)endl;returnoutput;}intmain(){Complexc1(2,4),c2(6,-10),c3;c3=c1+c2;coutc3;return0;}运行结果:c3=(8+-6i)};friendostream&operator(ostream&output,Complex&c){output(c.real;if(c.imag=0)output+;outputc.imagi)endl;returnoutput;}4.7.2重载流提取运算符“”重载函数格式:friendistream&operator(istream&,Complex&);在类外定义友元函数:istream&operator(istream&input,Complex&c)//用重载的“”实现复数的输出#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendistream&operator(istream&,Complex&);private:doublereal,imag;};ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}istream&operator(istream&input,Complex&c){cout请输入复数的实部和虚部:;inputc.realc.imag;returninput;}intmain(){Complexc1,c2;cinc1c2;return0;}编译器解释为:operator(cin,c1);说明:运算符重载函数第一个参数和函数的类型必须是istream类型的引用,目的是为了返回cin的当前值,以便连续输入。在运算符重载中使用引用参数的重要性:用引用形参在调用函数时,通过传递地址方式让形参成为实参的别名,不用生成临时变量,减少了时间和空间的开销。如重载函数的返回值是对象引用时,返回的是对象,它可以出现在赋值号的左侧而成为左值,可以被赋值或参与其他操作(如保留cout流的当前值以便能连续使用输出)。C++中,某些类型之间可以进行自动转换如:inti=6;i=7.5+i;16.0213.53134.8不同类型数据间的转换隐式类型转换,将int型转换成float求和计算,结果为float数据类型将float型结果转换成int类型4.8.1标准数据类型间的转换显示转换:C++格式:int(6.0)C格式:(int)6.06.4类类型转换Complex对象转换成double?定义专门的函数来处理能否实现自定义类转换成标准类型或转换成另外一个类呢?4.8.1标准数据类型间的转换类类型转换在程序编译时或在程序运行实现基本类型←→类类型类类型←→基本类型类对象的类型转换可由两种方式说明:称为用户定义的类型转换或类类型转换,有隐式调用和显式调用方式6.4类类型转换4.8不同类型数据间的转换转换构造函数基本类型类类型类型转换函数类类型基本类型转换构造函数的作用是将一个其它类型的数据转换成一个指定的类的对象。函数原型格式:指定类类型(其他类型数据);转换构造函数只有一个形参,如Complex(doubler){real=r;imag=0;}4.8.2用转换构造函数进行类型转换//使用类型转换函数的简单例子classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doub

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功