- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级函数特性 C++面向对象程序设计 学习目标 函数的默认值 内联函数 函数重载 操作符重载 函数 函数声明 函数名 函数返回值的类型 函数的参数个数和类型 函数声明可以不包含参数名 调用函数时可以不指定全部参数 回顾函数的声明和定义 函数在程序中可以既有声明又有定义,声明类似于说明书的作用,经常用于在真实函数定义前做前向的声明,声明可以不需要给出参数变量,而之后的定义则必须要给出参数变量,同时必须拥有函数体来叙述函数真正的实现 函数的声明和定义 函数的默认参数 为可以不指定的参数提供默认值 void func(int = 1, int = 3, char = *); 或 void func(int num1 = 1,int num2 = 3,char ch = *); 函数的默认参数 参数的默认值 一旦给一个参数赋了默认值,后续所有参数也都必须有默认值 void errfunc(int num1=2,int num2,char ch=+);//错误 默认值的类型必须正确 默认值可以在原型或者函数定义中给出,但不能在两个位置同时给出 建议在原型声明中指定默认值 参数的默认值 调用上面声明的函数 func() func(2,13,+); func(1); //第二个和第三个参数采用默认值 func(2,25); //第三个参数采用默认值 func(); //所有这三个参数都采用默认值 func(2,,‘+’); //错误! 如果遗漏了中间的参数,编译器将报错 参数的默认值 默认参数的优点 如果要使用的参数在函数中几乎总是采用相同的值,则默认参数非常方便,比如时间函数的设置,一般参数“秒”都是使用默认值0; 通过添加参数来增加函数的功能时,默认参数也非常有用 内联函数 通常的函数调用会节省内存空间,但是会花费一些额外的时间 内联函数节省短函数的执行时间 inline float converter(float dollars); 内联函数 非常短的函数适合于内联 函数体会插入到发生函数调用的地方 用来计算立方体体积的内联函数 注意事项 编译器必须先看到函数定义,而不是声明 编译器有可能会忽略inline关键字 不允许为不同的源文件中的内联函数指定不同的实现 函数重载 具有相同的名称,执行基本相同的操作,但是使用不同的参数列表 函数多态性 /*在同一个程序中,同时声明下面的函数是允许的, 因为它们的参数不同,编译器认为是不同的函数*/ void display(); void display(const char*); void display(int one, int two); void display(float number); 函数重载 当函数名相同时,编译器通过调用时参数的个数和类型确定调用重载函数的哪个定义 函数的区别必须要把函数名和参数的个数和类型联合起来加以区别 只有对不同的数据集完成基本相同任务的函数才应重载 函数重载的优点 不必使用不同的函数名 有助于理解和调试代码 易于维护代码 数据类型不同的重载 参数的类型不同,编译器就能够区分 int square(int); float square(float); double square(double); 同一函数名输出任何数据就是重载了输出函数 参数个数不同的重载 int square(int); //函数声明 int square(int,int,int); int asq = square(a) //函数调用 int bsq = square(x,y,z) 编译器会调用参数匹配的函数 与函数的声明顺序无关 不会考虑返回类型 函数重载的作用域规则 重载机制只有在函数声明的作用域内才有效 计算正方形面积的函数重载 计算正方形面积的函数重载 操作符重载 C语言的操作符”+ - * / ++ -- ”等等只能对基本数据类型进行操作 如:5/6; 9.53.2; int a=0; a++; C语言可以自己定义类型,如: 自定义类型的操作符运算 操作符不认识用户自定义类型,因此不知道该如何对新类型进行操作,如果需要做以上操作,那么就需要由程序员来为他们设计的类型来编写这些操作的实现过程 操作符重载 将现有的操作符与一个成员函数相关联并与其类的对象一起使用 使下面的操作成为可能 if (obj1 obj2) { //... } 其中,obj1和obj2是一个类的对象 操作符重载 编译器通过检查操作数的类型来选择重载操作符 把操作符看成是一种特殊的函数 是多态性的一种形式 运算多态性 注意要点 重载不能改变操作
文档评论(0)