欢迎来到天天文库
浏览记录
ID:41518929
大小:83.92 KB
页数:63页
时间:2019-08-26
《c谭浩强教学第4章修订(周四学时)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、4.1运算符重载的概述4.2运算符重载的方法4.3运算符重载的规则4.4运算符重载的函数一、友元运算符函数二、成员运算符函数4.5成员运算符函数与友元运算符函数的比较4.6单目运算符“++”和“--”的重载4.7重载流插入运算符和流提取运算符4.8不同类型数据间的转换4.1运算符重载概述例如:定义一个复数类complex,现在有两个对象cl和c2,希望做两个复数的加法:cl+c2o例4.1通过函数来实现复数加。(P120)#includeusingnamespacestd;classComplex{public:Complex(){r
2、eal二0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexcomplex_add(Complex&c2);〃复数相加的函数voiddisplay();private:doub1ereal;〃复数的实部doub1eimag;〃复数的虚部};ComplexComplex::complex_add(Complex&c2){Complexc;〃声明局部变量c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex::display(){c
3、out«z/(,,«real«,/,z,«imag«z/i)z/«endl;}intmain(){Complexcl(3,4),c2(5,TO),c3;〃定义3个复数对象c3=cl.complex_add(c2);〃调用复数相加函数cout〈〈〃cl二〃;cl.display();cout〈〈〃c2二〃;c2・display();cout〈〈〃cl+c2二〃;c3・display();return0;说明:做两个复数的加法:cl+c2,就应把“+”号解释为两个复数对象的实部与虚部之和.例如:“gkjhk”+”gjhkj”string1+string2;因
4、此.运算符重载的意义:(重载:一名多用)运算符重载的目的是为了满足某种操作的需要,在原有运算符实现不了,又不增加新的运算符种类的基础上,对含义相近的运算符进行重载。4.2运算符重载的方法在C++内部,任何运算都是通过函数来实现的。所以运算符重载其实就是函数重载,其函数名规定为:operator后随一个要重载的的运算符。重载运算符的函数一般格式函数类型operator运算符名称(形参表列){对运算符的重载处理}例如:operator+(参数)当编译器遇到名为:operator的运算符函数就检查传递给函数的参数类型,如在一个运算符的两边是自定义的数据类型,就
5、执行用户自定义的重载函数,而不是内部运算符的常规程序。例4.2改写例4。1运用重载函数实现两个complex类对象相加。#includeusingnamespacestd;classComplex{public:Complex(){real=O;imag=O;}Complex(double^doublei){real=r;imag=i;}Complexoperator+(Complex&c2);〃声明重载运算符+的函数voiddisplay();private:doublereal;doubleimag;};/定义重载运算符+的函数C
6、omplexComplex::operator+(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;voidComplex::display(){cout«H(n«real«,«imag«Hi)H«endl;}intmain(){Complexcl(3,4),c2(5,・10),c3;c3=cl+c2;//c3=c1.operator+(c2);cout«ncl=n;cledisplayO;cout«nc2='';c2.displ町();cout«'*cl+c2=
7、'';c3.display();return0;4.3运算符重载的规则(P124~126)1.只能对已有的C++运算符进行重载,不允许用户自定义新的运算符;1.C++允许重载的运算符算术运算符+、■、*、/、%位运算符A>&、1、!、>>、«关系运算符v、v=、>*>=、!=*—逻辑运算符!、&&、II赋值运算符=>+=>-=>/=、«=>>>=、&=、!=>A=其它运算符++、[]、()、・>、new、new[]、delete>delete[]有以下5个运算符不能重载:•类属关系运算符•成员指针运算符“林•作用域分辨符:"•长度运算符sizeof•三目
8、运算符“?:”2.重载不能改变运算符的操作个数、原有的优先级、原有的结合性;3.
此文档下载收益归作者所有