欢迎来到天天文库
浏览记录
ID:57029369
大小:729.00 KB
页数:78页
时间:2020-07-26
《重载复制转换课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十四章重载复制转换14.1运算符重载概述14.2运算符重载的方式14.3运算符重载的实现14.4C++中几个特殊运算符的重载14.5复制构造函数和转换构造函数C++语言允许程序员重新定义已有的运算符,使其能按用户的要求完成一些特定的操作,这就是所谓的运算符重载。运算符重载与函数重载相似,其目的是设置某一运算符,让它具有另一种功能,尽管此运算符在原先C++语言中代表另一种含义,但他们彼此之间并不冲突。C++会根据运算符的位置辨别应使用哪一种功能进行运算。14.1.1函数的重载所谓函数的重载是指完成不同
2、功能的函数可以具有相同的函数名C++的编译器是根据函数的实参来确定应该调用哪一个函数的。例如:intfun(inta,intb){returna+b;}intfun(inta){returna*a;}voidmain(void){cout<3、tsum,a=3,b=2;(int)=(int)+(int)sum=a+b;floatadd,x=3.2,y=2.5;(float)=(float)+(float)add=x+y;charstr[4],c1[2]="a",c2[2]="b";(char*)=(char*)+(char*)str=c1+c2;系统自动识别数据类型编译系统中的运算符“+”本身不能做这种运算,若使上式可以运算,必须重新定义“+”运算符,这种重新定义的过程成为运算符的重载。14.1.2运算符重载的必要性45问题举例——复数的运4、算classcomplex//复数类声明{public:complex(doubler=0.0,doublei=0.0)//构造函数{real=r;imag=i;}voiddisplay();//显示复数的值private:doublereal;doubleimag;};用“+”、“-”能够实现复数的加减运算吗?实现复数加减运算的方法——重载“+”、“-”运算符classA{floatx,y;public:A(floata=0,floatb=0){x=a;y=b;}}voidmain(void){Aa5、(2,3),b(3,4),c;c=a+b;}两对象不能使用+,必须重新定义+运算符重载就是赋予已有的运算符多重含义。C++通过重新定义运算符,使它能够用于特定类的对象执行特定的功能614.1.3运算符重载运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。运算符重载的实质就是函数重载。在实现过程中6、,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。运算符的重载从另一个方面体现了OOP技术的多态性,且同一运算符根据不同的运算对象可以完成不同的操作。为了重载运算符,必须定义一个函数,并告诉编译器,遇到这个重载运算符就调用该函数,由这个函数来完成该运算符应该完成的操作。这种函数称为运算符重载函数,它通常是类的成员函数或者是友元函数。运算符的操作数通常也应该是类的对象。运算符重载的规则如下:(1)C++7、中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这些运算符。(2)重载之后运算符的优先级和结合性都不会改变。(3)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。814.2运算符重载的方式运算符的重载形式有两种:重载为类的成员函数和重载为类的友元函数(全局函数)。运算符重载为类的成员函数及友元函数的语法形式如下:<函数类型>operator<运算符>(<形参表>8、){<函数体>;}friend<函数类型>operator<运算符>(<形参表>){<函数体>;}<函数类型>指定了重载运算符的返回值类型operator是定义运算符重载函数的关键词<运算符>给定了要重载的运算符名称,是C++中可重载的运算符形参表中给出重载运算符所需要的参数和类型。对于运算符重载为友元函数的情况,还要在函数类型说明之前使用friend关键词来说明。当运算符重载为类的成员函数时,函数的参数个数=原操作数个数-1(后置++、--除外)当重载
3、tsum,a=3,b=2;(int)=(int)+(int)sum=a+b;floatadd,x=3.2,y=2.5;(float)=(float)+(float)add=x+y;charstr[4],c1[2]="a",c2[2]="b";(char*)=(char*)+(char*)str=c1+c2;系统自动识别数据类型编译系统中的运算符“+”本身不能做这种运算,若使上式可以运算,必须重新定义“+”运算符,这种重新定义的过程成为运算符的重载。14.1.2运算符重载的必要性45问题举例——复数的运
4、算classcomplex//复数类声明{public:complex(doubler=0.0,doublei=0.0)//构造函数{real=r;imag=i;}voiddisplay();//显示复数的值private:doublereal;doubleimag;};用“+”、“-”能够实现复数的加减运算吗?实现复数加减运算的方法——重载“+”、“-”运算符classA{floatx,y;public:A(floata=0,floatb=0){x=a;y=b;}}voidmain(void){Aa
5、(2,3),b(3,4),c;c=a+b;}两对象不能使用+,必须重新定义+运算符重载就是赋予已有的运算符多重含义。C++通过重新定义运算符,使它能够用于特定类的对象执行特定的功能614.1.3运算符重载运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。运算符重载的实质就是函数重载。在实现过程中
6、,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。运算符的重载从另一个方面体现了OOP技术的多态性,且同一运算符根据不同的运算对象可以完成不同的操作。为了重载运算符,必须定义一个函数,并告诉编译器,遇到这个重载运算符就调用该函数,由这个函数来完成该运算符应该完成的操作。这种函数称为运算符重载函数,它通常是类的成员函数或者是友元函数。运算符的操作数通常也应该是类的对象。运算符重载的规则如下:(1)C++
7、中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这些运算符。(2)重载之后运算符的优先级和结合性都不会改变。(3)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。814.2运算符重载的方式运算符的重载形式有两种:重载为类的成员函数和重载为类的友元函数(全局函数)。运算符重载为类的成员函数及友元函数的语法形式如下:<函数类型>operator<运算符>(<形参表>
8、){<函数体>;}friend<函数类型>operator<运算符>(<形参表>){<函数体>;}<函数类型>指定了重载运算符的返回值类型operator是定义运算符重载函数的关键词<运算符>给定了要重载的运算符名称,是C++中可重载的运算符形参表中给出重载运算符所需要的参数和类型。对于运算符重载为友元函数的情况,还要在函数类型说明之前使用friend关键词来说明。当运算符重载为类的成员函数时,函数的参数个数=原操作数个数-1(后置++、--除外)当重载
此文档下载收益归作者所有