第4章运算符重载2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
privactoeu: t<<c3;
}; }ddooruuebbtulleernrime0a;alg; ;在执o行per本ato句r<时<(c,ou系t,c统3) 把它解释为:
第3页 共28页
目录
目退录出
4.7 重载流插入运算符和流提取运算符
➢ 4.7.2 重载流提取运算符“>>” ➢ 例4.8 在例4.7的基础上,增加重载流提取运
第8页 共28页
目录
目退录出
4.8 不同类型数据间的转换
➢ 4.8.2 转换构造函数 转换构造函数(conversion constructor function) 的作用是将一个其他类型的数据转 换成一个类的对象。
第9页 共28页
目录
目退录出
4.8 不同类型数据间的转换
先回顾一下以前学习过的几种构造函数: 默认构造函数: Complex( ); //没有参数 用于初始化的构造函数: Complex(double r,double i); 用于复制对象的复制构造函数: Complex (Complex &c);
coclaousutpst<uC<t<“o<“m“in(“pp<lu<etcxr.ereaal la<;n<d“+im”<a<gci.nimaraygpea<r<t “oi”f<c<oemnpdle; x number:”;
{}}}opprirrnfueeerffu(rripctttvbiipuuueeu.i{aiulcnrrrmtinnnnn>tcittCn<edda>:mioo>o<n:gcuuoi>mapcse.ttrsc.iuppt>pnier1mttuu=l(era;e.)ettr0ala;;x>eag)m>acemolc1><&u.&,i><tcmpc“2ouoia1”;tp<pg.<ie<eme<er;r“aaa+ngttd”ooe;l;r;r
第1页 共28页
目录
目退录出
4.7 重载流插入运算符和流提取运算符
➢ 只能将重载“<<” 和“>>” 的函数作为友 元函数或普通的函数,而不能将它们定义为 成员函数。
➢ 例4.7 在例4.2的基础上,用重载的“<<”输 出复数。
第2页 共28页
目录
目退录出
#Coisontmcrelupadlmeex&<Coioopsmetrpealaetomxr:>:<o<pe(orasttorer a+m(C&oomutppleuxt,C&ocm2)plex& c)
u{ sing namespace std;
crloeautsutsprnuCtCo<mo<m“p(“lpe<lxe<xc(.real+<c<2“+.r”e<a<l,cim.imaaggee+<c2<.“im”<a<geen)d; l;
}{rpeutubrlinc:output;
}coCuinott<mm<p“al(ei“nx<(()<){cre3a.rle=a0l;<im<a“+g=”<0<;}c3.image<<“i”<<endl;
第10页 共28页
目录
目退录出
一种新的构Hale Waihona Puke Baidu函数——转换构造函数
转换构造函数只有一个形参,如 Complex(double r) {real=r;imag=0;}
其作用是将double型的参数r转换成Complex 类的对象,将r作为复数的实部,虚部为0。
第11页 共28页
目录
目退录出
一种新的构造函数——转换构造函数
转换构造函数只有一个形参,如 Complex(double r) {real=r;imag=0;}
在类体中,可以有转换构造函数,也可以没有 转换构造函数,视需要而定。
4.7 重载流插入运算符和流提取运算符
➢ 4.7.1 重载流插入运算符“<<” 用户自己定义的类型的数据,是不能直接用
“<<” 和“>>”来输出和输入的。如果想用 它们输出和输入自己声明的类型的数据,必 须对它们重载。
➢ 对“<<” 和“>>”重载的函数形式如下:
➢ istream & operateor >> (istream &,自定义类); ➢ ostream & operateor >> (ostream &,自定义类);
第5页 共28页
目录
目退录出
4.8 不同类型数据间的转换
➢ 4.8.1 标准类型数据间的转换 在C++中,某些不同类型数据之间可以自动转 换,例如 int i = 6; i = 7.5 + i; 这种转换是由C++编译系统自动完成的,用户 不需干预。这种转换称为隐式类型转换。
第6页 共28页
目录
目退录出
<< >>
(ostream&,Complex&); (istream&, Complex&);
docuinb>le>cre1a>l>;c2;
docuobulte<<im“ca1=g”;<<c1;
}; cout<<“c2=”在<<执c2;行本句时,调用:
return 0; }
operator>>(cin,c1)
4.8 不同类型数据间的转换
C++还提供显式类型转换,程序人员在 程序中指定将一种指定的数据转换成另 一指定的类型,其形式为 :
类型名(数据) 如 int(89.5) 其作用是将89.5转换为整型数89。
第7页 共28页
目录
目退录出
4.8 不同类型数据间的转换
➢ 对于用户自己声明的类型,编译系统并不知 道怎样进行转换。解决这个问题的关键是让 编译系统知道怎样去进行这些转换,需要定 义专门的函数来处理。
C{ omplex(double r,double i){real=r;imag=i;}
CoCmopmlepxleoxpce1ra(2to,4r )+,c(2C(6o,m10p)le,cx3&; c2);
friecn3d=co1s+trce2a;m& operator <<(ostream&,Complex&);
算符“>>”,用“cin”输入复数,用 “<<” 输出复数。
第4页 共28页
目录
目退录出
#oissitnrtrecealaummd&e&o<oppieoersraattroteorar>m<><>((isotsretraemam&&inoputp,Cuto,Cmopmlepxl&exc&) c)
u{ sing namespace std;