c++程序设计 陈圣国第4章.ppt

c++程序设计 陈圣国第4章.ppt

ID:50350318

大小:91.50 KB

页数:32页

时间:2020-03-08

c++程序设计 陈圣国第4章.ppt_第1页
c++程序设计 陈圣国第4章.ppt_第2页
c++程序设计 陈圣国第4章.ppt_第3页
c++程序设计 陈圣国第4章.ppt_第4页
c++程序设计 陈圣国第4章.ppt_第5页
资源描述:

《c++程序设计 陈圣国第4章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、4.1函数的重载4.2运算符重载第4章重载返回主目录4.1函数的重载4.1.1函数重载的定义在第1章介绍C语言与C++之间的关系时,提到C++语言中允许函数重载,即可以有多个同名但参数形式不完全相同的函数。它允许程序员定义作用相同但参数形式不同的函数,在调用时无须记忆多个函数名,而且可以增加程序的可读性。例如,求两个数中最大值的函数max,不管其参数的整数类型、实数类型、字符串,都可以使用同名函数来实现,调用时只需使用max就可以了,编译器将根据实参的类型判断应该调用哪一个函数。函数重载无须特别声明,只要所定义的函数与已经定义的同名函数形参形式不完全相同,C++编译器就

2、认为是函数的重载。例如下面的两个函数:voidGetTime(long*ticks);voidGetTime(int*hours,int*minutes,int*seconds);作用相同,都是返回当前时间,只是其返回的时间表示形式不同,使用相同的函数名,但其参数形式不同。在使用函数重载时要注意,如果某个函数参数有缺省值,必须保证其参数缺省后调用形式不与其它函数混淆。例如下面的重载是错误的:intf(inta,floatb);voidf(inta,floatb,intc=0);因为第二个函数缺省参数c后,其形式与第一个函数参数形式相同。下面的函数调用语句:f(10,2.

3、0);具有二义性,既可以调用第一个函数,也可以调用第二个函数,编译器不能根据参数的形式确定到底调用哪一个。类的函数成员同样也可以重载。例如前面介绍的构造函数,一个类可以具有多个不同参数形式的构造函数。类的函数成员的重载与全局函数的重载方法相同。4.1.2一个简单的例子下面实现前面提到的max函数的重载版本:intmax(inta,intb){if(a>b)returna;elsereturnb;}floatmax(floata,floatb){if(a>b)returna;elsereturnb;}char*max(char*a,char*b){if(strcmp(a,

4、b)>0)returna;elsereturnb;}这里定义了三个名为max的函数,它们的函数原型不同,C++编译器在遇到程序中对max函数的调用时将根据参数形式进行匹配,如果找不到对应的参数形式的函数定义,将认为该函数没有函数原型,编译器会给出错误信息。4.1.3在C++中编译C程序在使用C++语言进行程序开发时,由编译器将源程序文件编译为目标文件,并进行连接。为了实现函数的重载,C++语言编译器在编译时对函数的处理与C语言编译器采取了不同的方法。C语言编译器在处理函数时只需保留函数名的信息,即可在连接时将不同的函数区别开来;而C++编译器在编译时生成一个包含函数名和

5、函数参数信息的符号来取代原来的函数名,以保证在连接时能够找到正确的函数。但是,有时程序员可能希望编译器对某些函数使用C编译的习惯来进行处理。例如,需要在C++程序中调用C语言编译的函数库中的函数,此时可以采取如下的方法来编写包含该函数库中的函数原型声明的头文件。extern"C"{/*在此处写上函数的原型声明*/编译器将以C语言的编译方式处理该函数的名字。如果要保证该头文件能够同时被C编译器和C++编译器正确编译,可采用下面的方法:#ifdef__cplusplusextern"C"{#endif/*在此处写上函数的原型声明*/#ifdef__cplusplus}#en

6、dif4.2运算符重载4.2.1运算符重载的基本方法C++语言中提供了运算符重载的机制,程序员可以对自定义的数据类型使用C++语言本身提供的标准运算符进行运算,运算的方式由重载的特殊函数来完成。这些函数有特殊的函数名,可使用运算符方式进行调用,当然也可以使用传统的函数调用的方式进行调用。使用运算符重载可以提高程序的可读性。例如,前面讲的整形数据元素集合类的例子中定义了一个函数Union来实现集合的并集运算,如果使用+运算符来实现集合的并集运算,如用A+B表示两个集合A、B的并集运算,则程序会具有更好的可读性。C++语言中常见的单目和双目运算符大部分都可以重载。下面以一个

7、简单类的运算的例子来介绍运算符重载的基本方法。先来看看如何在类的定义中声明一个重载的运算符:classPoint{intx,y;public:Point(intx,inty){Point::x=x;Point::y=y;}Pointoperator+(Pointp){returnPoint(x+p.x,y+p.y);}Pointoperator–(Pointp){returnPoint(x-p.x,y–p.y);}};在Point类中重载了运算符+、-,实际上定义了两个函数成员,它们的名字是operator+与operator–。定义了这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。