欢迎来到天天文库
浏览记录
ID:51308891
大小:243.50 KB
页数:33页
时间:2020-03-21
《《C语言5重载》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++程序设计第五章重载9/18/20211内容提要:函数重载运算符重载类型转换9/18/202125.1函数重载关于函数重载,在函数部分已作了简单介绍,本章进一步详细介绍。函数重载指的是两个以上的函数,取同一个名字,只要使用不同类型的参数或参数个数不同,编译器便知道在什么情况下该调用哪个函数。9/18/20213例5.1若希望进行两个整数相加,两个实数相加,两个浮点数相加,两个字符串相加,要用四个函数来实现,如果使用C语言编程,必须给四个函数起四个不同的函数名。而C++支持函数重载,因此只需给这四个函数取一个相同的
2、名字即可,将来通过参数的类型来决定调用哪一个具体函数,减少了用户调用函数的麻烦。程序9/18/202141、构造函数重载前面介绍构造函数时,曾经讲过在定义构造函数时可定义多个,只是它们的参数的个数和类型取的不同,这实际就是构造函数的重载。对构造函数的重载,可使系统有几个不同的途径对对象初始化。9/18/202152、类成员函数重载在类中除了构造函数可以重载外,一般的成员函数也可以重载,其重载原则和构造函数相同,重载函数之间靠包含的参数的类型与个数不同进行区分。3、类以外的一般函数重载在函数部分已作过介绍。9/18/2
3、02165.2运算符重载运算符重载就是赋予已有的运算符多重含义。C++中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。例如,通过对+,—,*,/运算符的重新定义,使它们可以完成复数、分数等不同类的对象的加减乘除运算操作。从而增强了C++语言的处理能力。9/18/202171、运算符重载概述C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。运算符重载的实质就是函数重载。在实现过程中,首先把
4、指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。C++中大多数运算符都能重载,只有少数运算符不能重载。9/18/20218可以重载的运算符:+-*/%^&
5、~!=<>+=-=*=/=%=^=&=
6、=<<>>>>=<<===!=<=>=&&
7、
8、++--[]()newdelete不能重载的运算符:.::*?:->9/18/20219运算符重载的规则如下:(1)C++中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这
9、些运算符。(2)重载之后运算符的优先级和结合性都不会改变。(3)不能改变运算符原有的语法结构,不能改变运算符原有的操作数个数。(4)不可臆造新的运算符。(5)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。9/18/2021102、用成员函数重载运算符在C++中,运算符的重载实际上是一种函数调用的形式,用成员函数重载运算符就是将运算符重载定义成一个类的成员函数的形式。9/18/202111
10、(1)用成员函数重载运算符的语法①在类定义中声明运算符函数<函数类型>operator<运算符>(<形参表>);②与一般的成员函数相似,在类外对其进行定义<函数类型>operator<运算符>(<形参表>){<函数体>;}③重载运算符的使用:使用起来就像原运算符一样方便9/18/202112(2)说明:其中,<函数类型>指定了重载运算符的返回值类型,operator是定义运算符重载函数的关键词,<运算符>给定了要重载的运算符名称,是C++中可重载的运算符,形参表中给出重载运算符所需要的参数和类型。对于运算符重载为友元
11、函数的情况,还要在函数类型说明之前使用friend关键词来说明。当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少一个(后缀++、--除外);一般来讲,单目运算符最好重载为成员函数,而双目运算符则最好重载为友元函数。运算符重载的主要优点就是允许改变使用于系统内部的运算符的操作方式,以适应用户新定义类型的类似运算。9/18/202113#includeclassComplex{doublerpart;doubleipart;public:Complex(doublerp=0.0,
12、doubleip=0.0){rpart=rp;ipart=ip;}Complexoperator+(Complexc);voidprint();};ComplexComplex::operator+(Complexc){Complextemp;temp.rpart=rpart+c.rpart;temp.ipart=ipart+c.ipart;r
此文档下载收益归作者所有