C语言5重载.ppt
《C语言5重载.ppt》由会员分享,可在线阅读,更多相关《C语言5重载.ppt(33页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、C+程序设计程序设计第五章第五章 重载重载11/19/20221内容提要:内容提要:函数重载函数重载运算符重载运算符重载类型转换类型转换11/19/202225.1 函数重载函数重载关于函数重载,在函数部分已作了简单介关于函数重载,在函数部分已作了简单介绍,本章进一步详细介绍。绍,本章进一步详细介绍。函数重载指的是两个以上的函数,取同一函数重载指的是两个以上的函数,取同一个名字,只要使用不同类型的参数或参数个名字,只要使用不同类型的参数或参数个数不同,编译器便知道在什么情况下该个数不同,编译器便知道在什么情况下该调用哪个函数。调用哪个函数。11/19/20223例例5.1若希望进行两个整数相加
2、,两个实数相加,若希望进行两个整数相加,两个实数相加,两个浮点数相加,两个字符串相加,要用两个浮点数相加,两个字符串相加,要用四个函数来实现,如果使用四个函数来实现,如果使用C语言编程,必语言编程,必须给四个函数起四个不同的函数名。而须给四个函数起四个不同的函数名。而C+支持函数重载,因此只需给这四个函支持函数重载,因此只需给这四个函数取一个相同的名字即可,将来通过参数数取一个相同的名字即可,将来通过参数的类型来决定调用哪一个具体函数,减少的类型来决定调用哪一个具体函数,减少了用户调用函数的麻烦。了用户调用函数的麻烦。程序程序11/19/202241、构造函数重载、构造函数重载前面介绍构造函数
3、时,曾经讲过在定义构前面介绍构造函数时,曾经讲过在定义构造函数时可定义多个,只是它们的参数的造函数时可定义多个,只是它们的参数的个数和类型取的不同,这实际就是构造函个数和类型取的不同,这实际就是构造函数的重载。数的重载。对构造函数的重载,可使系统有几个不同对构造函数的重载,可使系统有几个不同的途径对对象初始化。的途径对对象初始化。11/19/202252、类成员函数重载、类成员函数重载在类中除了构造函数可以重载外,一般的在类中除了构造函数可以重载外,一般的成员函数也可以重载,其重载原则和构造成员函数也可以重载,其重载原则和构造函数相同,重载函数之间靠包含的参数的函数相同,重载函数之间靠包含的参
4、数的类型与个数不同进行区分。类型与个数不同进行区分。3、类以外的一般函数重载、类以外的一般函数重载在函数部分已作过介绍。在函数部分已作过介绍。11/19/202265.2 运算符重载运算符重载运算符重载就是赋予已有的运算符多重含运算符重载就是赋予已有的运算符多重含义。义。C+中通过重新定义运算符,使它能中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。例够用于特定类的对象执行特定的功能。例如,通过对如,通过对+,*,/运算符的重新定运算符的重新定义,使它们可以完成复数、分数等不同类义,使它们可以完成复数、分数等不同类的对象的加减乘除运算操作。从而增强了的对象的加减乘除运算操作。从而
5、增强了C+语言的处理能力。语言的处理能力。11/19/202271、运算符重载概述、运算符重载概述C+中中预预定定义义的的运运算算符符的的操操作作对对象象只只能能是是基基本本数数据据类类型型,实实际际上上,对对于于很很多多用用户户自自定定义义类类型型,也也需需要要有有类类似似的的运运算算操操作作,这这就就提提出出了了对对运运算算符符进进行重新定义,赋予已有符号以新功能的要求。行重新定义,赋予已有符号以新功能的要求。运算符重载的实质就是函数重载。在实现过程中,运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的首先把指定的运算表达式转化为对运算符函数的调用,运算
6、对象转化为运算符函数的实参,然后调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。程是在编译过程中完成的。C+中大多数运算符都能重载,只有少数运算符中大多数运算符都能重载,只有少数运算符不能重载。不能重载。11/19/20228可以重载的运算符:可以重载的运算符:+-*/%&|!=+=-=*=/=%=&=|=!=&|+-()new delete不能重载的运算符:不能重载的运算符:.:*?:-11/19/20229运算符重载的规则如下:运算符重载的规则如下:(1)C+中中的的运运算算符符除除了了少
7、少数数几几个个以以外外,全全部部可可以以重重载载,而且只能重载已有的这些运算符。而且只能重载已有的这些运算符。(2)重载之后运算符的优先级和结合性都不会改变。)重载之后运算符的优先级和结合性都不会改变。(3)不不能能改改变变运运算算符符原原有有的的语语法法结结构构,不不能能改改变变运运算算符符原原有的操作数个数。有的操作数个数。(4)不可臆造新的运算符。)不可臆造新的运算符。(5)运算符重载是针对新类型数据的实际需要,对原有运)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运
8、算符的操作对象个数,同有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。时至少要有一个操作对象是自定义类型。11/19/2022102、用成员函数重载运算符、用成员函数重载运算符在在C+中,运算符的重载实际上是一种函中,运算符的重载实际上是一种函数调用的形式,用成员函数重载运算符就数调用的形式,用成员函数重载运算符就是将运算符重载定义成一个类的成员函数是将运算符重载定义成一个类的成员函数的形式。的形式。11/19/202211(1)用成员函数重载运算符的语法)用成员函数重载运算符的语法 在类定义中声明运算符函数在类定义中声明运算符函数 operator ();
9、);与一般的成员函数相似,在类外对其进行定义与一般的成员函数相似,在类外对其进行定义 operator();重载运算符的使用:使用起来就像原运算符一样重载运算符的使用:使用起来就像原运算符一样方便方便11/19/202212(2)说明:)说明:其其中中,指指定定了了重重载载运运算算符符的的返返回回值值类类型型,operator是是定定义义运运算算符符重重载载函函数数的的关关键键词词,给给定定了了要要重重载载的的运运算算符符名名称称,是是C+中中可可重重载载的的运运算算符符,形形参参表表中中给给出出重重载载运运算算符符所所需需要要的的参参数数和和类类型型。对对于于运运算算符符重重载载为为友友元元
10、函函数数的的情情况况,还还要要在在函函数数类类型型说说明明之之前前使使用用friend关键词来说明。关键词来说明。当运算符重载为类的成员函数时,函数的参数个数比原来当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少一个(后缀的运算数个数要少一个(后缀+、-除外);除外);一般来讲,单目运算符最好重载为成员函数,而双目运算一般来讲,单目运算符最好重载为成员函数,而双目运算符则最好重载为友元函数。运算符重载的主要优点就是允符则最好重载为友元函数。运算符重载的主要优点就是允许改变使用于系统内部的运算符的操作方式,以适应用户许改变使用于系统内部的运算符的操作方式,以适应用户新定义类型的
11、类似运算。新定义类型的类似运算。11/19/202213#include class Complex double rpart;double ipart;public:Complex(double rp=0.0,double ip=0.0)rpart=rp;ipart=ip;Complex operator+(Complex c);void print();Complex Complex:operator+(Complex c)Complex temp;temp.rpart=rpart+c.rpart;temp.ipart=ipart+c.ipart;return temp;void Comp
12、lex:print()cout0)cout“+”;if(ipart!=0)coutipart“in”;int main()Complex a(1.1,2.2),b(3.3,4.4),c,d;d=a.operator+(b);/显式调用显式调用 c=a+b;/隐式调用隐式调用 c.print();d.print();return 0;程序中出现的表达式程序中出现的表达式a+ba+b解释为解释为a.operator+(b)a.operator+(b)(当前对象作为左操作数当前对象作为左操作数)11/19/2022143、用友元重载运算符、用友元重载运算符(1)用友元函数重载运算符的语法)用友元函数
13、重载运算符的语法 在类定义中声明运算符函数在类定义中声明运算符函数friend operator (););与一般的成员函数相似,在类外对其进行定义与一般的成员函数相似,在类外对其进行定义friend operator();重载运算符的使用:用友元函数定义的重载运算重载运算符的使用:用友元函数定义的重载运算符和用成员函数定义的重载运算符相同。符和用成员函数定义的重载运算符相同。11/19/202215(2)说明)说明为友元函数重载运算符的参数表填写操作为友元函数重载运算符的参数表填写操作数时,要注意友元函数是不属于任何类的,数时,要注意友元函数是不属于任何类的,它没有它没有this指针,这与成
14、员函数不同。即指针,这与成员函数不同。即当重载为类的友元函数时,参数个数与原当重载为类的友元函数时,参数个数与原运算数的个数相同。运算数的个数相同。11/19/202216#include class Complex private:double rpart;double ipart;public:Complex(double rp=0.0,double ip=0.0)rpart=rp;ipart=ip;friend Complex operator+(Complex a,Complex b);void print();Complex operator+(Complex a,Complex b
15、)Complex temp;temp.rpart=a.rpart+b.rpart;temp.ipart=a.ipart+b.ipart;return temp;void Complex:print()cout0)cout“+”;if(ipart!=0)coutipart“in”;int main()Complex a(1.1,2.2),b(3.3,4.4),c,d;c=a+b;/隐式调用隐式调用 d=operator+(a,b);/显式调用显式调用 c.print();d.print();return 0;11/19/2022174、+和和-的重载的重载类类的的单单目目运运算算符符可可重重载载
16、为为一一个个没没有有参参数数的的非非静静态态成成员员函函数数或或者者带带有有一一个个参参数数的的非非成成员员函函数数,参参数数必必须须是是用用户户自自定定义义类型的对象或者是对该对象的引用。类型的对象或者是对该对象的引用。在在C+中中,单单目目运运算算符符有有+和和-,它它们们是是变变量量自自动动增增1和和自自动动减减1的的运运算算符符。在在类类中中可可以以对对这这两两个个单单目目运运算算符符进进行重载。行重载。如如同同“+”和和“”运运算算符符有有前前缀缀、后后缀缀两两种种使使用用形形式式,“+”和和“-”重重载载运运算算符符也也有有前前缀缀和和后后缀缀两两种种运运算算符符重重载形式,以载形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 重载
限制150内