第3章函数重载及内联函数.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章函数重载及内联函数

计算机科学与工程学院 西安理工大学 第三章 函数重载与内联函数 学习目标 理解为什么要进行函数重载,掌握普通函数重载 掌握成员函数重载 理解并掌握函数默认参数的使用 理解内联函数的作用,掌握内联函数的使用 函数重载 大多数编程语言规定每个函数只能有唯一的标识符。如果想打印三种不同类型的数据:整型、字符型和实型,则不得不用三个不同的函数名,如Print_int( )、Print_char( )、Print_float( ) 函数重载是指两个或两个以上的函数具有相同的函数名,但参数类型不一致或参数个数不同。编译器根据实参和形参的类型及个数进行相应地匹配,自动确定调用哪一个函数。使得重载的函数虽然函数名相同,但功能却不完全相同。 函数重载是C++对C语言的扩展,包括非成员函数的重载和成员函数重载 非成员函数重载 非成员函数重载是指对用户所编写的那些功能相同或类似、参数个数或类型不同的用户自定义函数,在C语言中必须采用不同的函数名加以区分,而在C++中可以采用相同的函数名,从而提高程序的可读性。支持函数重载是C++多态性的体现之一。 [例3-1] 函数重载举例——编程求两个数的积 非成员函数重载 注意 : 重载函数必须具有不同的参数个数或不同的参数类型,若只是返回值的类型不同或形参名不同是不行的。例如: void mul (int x,int y); int mul (int x,int y); //错误,编译器不以返回值来区分函数 再如: int mul (int x,int y); int mul (int a,int b); //错误,编译器不以形参名来区分函数 重载函数应满足:函数名相同,函数的返回值类型可以相同也可以不同,但各函数的参数表中的参数个数或类型必须有所不同。这样才能进行区分,从而正确地调用函数。 非成员函数重载 匹配重载函数的顺序:寻找一个严格的匹配,如果能找到,调用该函数;通过内部类型转换寻求一个匹配,如果能找到,调用该函数;通过强制类型转换寻求一个匹配,如果能找到,调用该函数。 不要将不同功能的函数定义为重载函数,以免产生误解。例如: int f(int a,int b) { return a+b; } double f(double a,double b) { return a*b; } 非成员函数重载 创建重载函数时,必须让编译器能区分两个(或更多)的重载函数,当创建的多个重载函数编译器不能区分时,编译器就认为这些函数具有多义性,这些函数调用是错误的,编译器不会编译该程序。 举例说明 当函数的重载带有默认参数时,要避免产生二义性(见3.3节) 成员函数重载 成员函数的重载主要是为了适应相同成员函数的参数多样性。成员函数重载的一个很重要的应用就是重载构造函数。在解决实际问题时,可能会需要创建具有不同形态的对象,例如,创建一个对象时可能需要带参数,也可能不需要带参数,或是带的参数的个数不一样。解决这些问题就需要用到C++提供的函数的重载机制。通过对构造函数进行重载,可以实现定义对象时初始化赋值的多样性。但是析构函数不能重载,因为一个类中只允许有且仅有一个析构函数。 [例3-2] 构造函数重载——求两个复数的和 函数的默认参数 在调用函数时,是否可以用不同的方法调用同一函数?在很多程序设计语言中是不允许的。而在C++中,提供了默认参数的做法,也就是允许在函数的声明或定义时给一个或多个参数指定默认值。这样在进行调用时,如果不给出实际参数,则可以按指定的默认值进行工作 说明: (1) 当函数既有原型声明又有定义时,默认参数只能在原型声明中指定,而不能在函数定义中指定,例如: Complex(double r=0,double i=0); //表示r和i的默认值是0 Complex(3.5, 9.6); //r=3.5, i=9.6 Complex(3.5); //r=3.5, i=0 Complex(); //r=0, i=0 函数的默认参数 在函数原型中,所有取默认值的参数都必须出现在不取默认值的参数的右边。也就是一旦开始定义默认值的参数,在其后面就不能再说明不取默认值的参数了。例如: Complex(double r=0,double i=0); //正确,在函数原型声明中指定 默认参数 Complex(double r=0,double i=0) //错误,不能在函数定义中指定 默认参

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档