函数与运算符的重载.ppt

上传人:xt****7 文档编号:5330133 上传时间:2020-01-26 格式:PPT 页数:48 大小:531.81KB
返回 下载 相关 举报
函数与运算符的重载.ppt_第1页
第1页 / 共48页
函数与运算符的重载.ppt_第2页
第2页 / 共48页
函数与运算符的重载.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
2020 1 26 1 如何上大学 2020 1 26 2 2020 1 26 3 高等教育出版社2004年第2版 高级语言C 程序设计 第5章函数与运算符的重载 2020 1 26 4 函数的定义和调用方法 5 2 函数调用时的参数传递方法 函数的嵌套与递归 5 3 函数与运算符的重载 5 4 函数与C 程序结构 5 5 函数的重载和默认参数值 4 库函数的正确使用 本章重点 2020 1 26 5 一 函数的概念1 函数是一个完成特定功能的程序段 除主函数不能被其它函数调用外 其它函数可以通过函数调用语句以及参数的传递实现调用 以完成既定功能 2 函数的分类 1 主函数 main 和辅函数 2 标准函数 系统函数 和用户定义函数 3 无参函数和有参函数无参函数 函数名 有参函数 函数名 形式参数表 二 函数的定义定义格式 存储类型符数据类型符函数名 形式参数表 函数头 数据定义语句序列 执行语句序列 函数体 return 表达式 存储类型 extern 外部函数 省略时的默认类型 static 内部函数 只能在本编译文件内使用 数据类型 函数返回值的类型 无返回值为void类型 5 1 1函数值和return语句 2020 1 26 6 三 函数值和return语句 1 函数值 被调函数执行后所返回的值 无返回值时 则定义为void 空 函数 2 return语句 返回函数值的语句 格式 return表达式 形式参数表格式 数据类型形式参数1 数据类型形式参数2 例6 1 调用函数比较2个数的大小并返回大数 includeintmax intm1 intm2 usingnamespacestd intmax int int intx intmain if m1 m2 x m1 elsex m2 inta b x returnx a 2 b 3 x max a b cout x endl return0 2020 1 26 7 一 函数的调用形式1 调用格式 函数名 实际参数表 2 被调函数的声明如果被调函数的定义在主调函数之后 一般要对被调函数加以声明 被调函数的声明格式 数据类型符被调函数名 形式参数表 3 调用方式 1 函数调用语句 例6 2 函数调用语句p 104 includeusingnamespacestd voidroom1 voidroom2 voidmain 5 1 2函数调用形式 2020 1 26 8 coutdoublemax doublem1 doublem2 usingnamespacestd doublemax int int if m1 m2 returnm1 voidmain elsereturnm2 doublea 2 5 b 3 39 c 13 25 cout max max c max a b endl 2020 1 26 9 4 函数嵌套调用方式 例6 3 函数嵌套调用 includeusingnamespacestd voidroom1 voidroom2 voidmain cout Iaminmainandcallromm endl room1 voidroom2 cout NowIaminroom2 endl voidroom1 cout NowIaminroom1andcallroom2 endl room2 2020 1 26 10 利用形参与实参在函数间传递数据1 形式参数 在声明函数时指定函数参数的名称 类型及个数 形式参数表格式 数据类型形式参数1 数据类型形式参数2 2 实在参数 在函数调用时取代形参作为局部变量给予分配内存单元 调用结束后 释放占用的内存单元 实参在类型 数量以及次序上必须与形参保持一致 形参变量作为被调函数的局部变量 单独分配内存 5 1 3函数的形式参数和实在参数 2020 1 26 11 1 函数的调用过程 1 调用函数在遇到被调函数时 将以函数名提供的地址执行一次无条件转移指令 2 转移之前 将保护当前工作环境 将下一条语句地址作为断点加以保护 然后转去执行被调函数 3 函数执行结束 或遇到返回语句return时 将恢复原来调用函数的工作环境 返回到断点处继续执行 调用函数 被调函数 2 函数的返回区 返回到调用函数断点处继续执行 5 1 4函数的返回区 断点 2020 1 26 12 一 预处理命令1 包含语句格式 include 带路径的头文件名格式 盘符 文件夹名 头文件名 例 d vc6 include stdio h常用的头文件 include 用于数学函数 include 用于字符串函数 include 用于格式输出2 宏定义语句格式 define宏名代换正文例 defineMAX a b a b a b 试题例 defineRa b definePI3 1415若 inta 2 b 3 area PI R R cout area 问 输出结果是 15 28 78 5 5 2编译指令 2020 1 26 13 二 条件编译命令1 if条件表达式 语句 条件成立时编译内容 else 语句 条件不成立时编译内容 endif2 defined预处理操作符格式 defined 标识符 功能 当 标识符 被 define定义 则返回逻辑值 真 1 否则 则返回逻辑值 假 0 例 includeusingnamespacestd defineDEBUGvoidmain inti 555 程序 ifdefined DEBUG cout DEBUG valueofiis i endl endif 2020 1 26 14 2 设计一个简单的加密程序 它把当前的字母变成下一个字母 例如把 a 变成 b 把 z 变成 a 但其它字符不变 用条件编译方法实现选择 解 分析问题 1 如何把 a 变成 b 若 ch a ch 字母的ASCII码值加1 变成下一个字母 2 如何把 z 变成 a ch if ch z ch a 3 条件编译方法 defineJIAMI ifdefinedJIAMIif ch a endif 参考程序 2020 1 26 15 includeusingnamespacestd include defineJIAMIvoidmain charch while ch 3 ch getch cout a 2020 1 26 16 1 什么是内联函数 内联函数是函数的一种特殊形式 即将被调用函数的函数体直接插入到调用函数内部的调用方式 在C 程序中符合下列条件的函数为内联函数 函数说明前冠以 inline 关键字的函数 类内定义的函数成员 将在第七章介绍 2 内联函数的定义方式inline函数类型函数名 形式参数表 函数体 3 内联函数使用规则 1 内联函数适用于较小的函数 以防程序代码增加过多 2 具有循环语句 switch语句的函数不能说明为内联函数 3 内联函数必须在调用该函数之前定义 5 3内联函数 2020 1 26 17 例 includeusingnamespacestd inlineintisnumber charc return c 0 2020 1 26 18 一 函数重载 为同一个函数定义几个版本称为函数重载 特点 1 重载函数具有同一函数名 但功能不同 2 重载函数的形式参数个数 类型 或顺序不同 用以区分函数 3 不同函数类型不能区分重载函数 例6 5 重载函数产生多态性 includeusingnamespacestd doublemax double double 2个实型参数的函数原型intmax int int 2个整型参数的函数原型charmax char char 2个字符型参数的函数原型intmax int int int 3个实型参数的函数原型voidmain cout max 2 5 17 54 max 56 8 max w p endl cout max 5 9 4 max 5 9 4 max 5 4 9 max 5 4 9 endl 5 4函数重载和默认函数 2020 1 26 19 doublemax doublem1 doublem2 2个实型参数的函数原型 return m1 m2 m1 m2 intmax intm1 intm2 2个整型参数的函数原型 return m1 m2 m1 m2 charmax charm1 charm2 2个字符型参数的函数原型 return m1 m2 m1 m2 intmax intm1 intm2 intm3 3个实型参数的函数原型 intt max m1 m2 returnmax t m3 运行结果 17 5456wmax 5 9 4 9max 5 4 9 9二 函数的默认参数值 函数的形式参数具有默认值 1 默认值指定方法 1 声明函数原型或定义函数时必须在参数表中指定默认值 2 具有默认值的参数应当位于形参表的最右端 3 使用默认参数 不能对少于参数个数的函数进行重载 2020 1 26 20 2 默认参数的使用 如果提供实际参数值 则使用实际参数值 否则函数采用默认参数值 例6 6 includeusingnamespacestd intadd intm1 0 intm2 0 intm3 0 intm4 0 returnm1 m2 m3 m4 voidmain cout add 1 3 add 1 3 5 add 1 3 5 7 endl 运行结果 4 9 16 2020 1 26 21 常量 1 正确包含头文件 不同的库函数在不同的头文件中定义 使用库函数必须包含相应的头文件 例6 7 使用数学函数必须包含math h头文件 includeusingnamespacestd include 数学函数必须包含math h头文件voidmain floatx y z cin x y z fabs x y cout x y 的绝对值为 z endl 5 5正确使用库函数 2020 1 26 22 2 正确使用库函数 注意函数参数的类型 例6 8 求30o的正弦值 includeusingnamespacestd includevoidmain floatx x sin 30 0 cout x x endl 2020 1 26 23 例6 9 求x y的余数 includeusingnamespacestd includevoidmain 求x y的余数 doublex y z floatz 函数原型是 doublefmod double double x 10 5 y 3 z fmod x y cout z z endl 2020 1 26 24 6 6 1计算机解题步骤1 设计解题的方法 2 用类计算机语言描述解题方法 3 将类计算机语言转换成计算机语言程序 4 编辑C 源程序 5 编译C 源程序 查错 修改 直至产生 obj文件 6 连接成 exe文件 7 运行 exe文件 8 验证结果 发现错误 返回修改 直至获得正确结果 例6 11 编写一个求m的阶乘的函数 1 分析问题 m 1 2 3 m2 描述解题方法 f 1 重复计算f f i i 1 2 m 3 编写程序 4 编辑CH6Li11 CPP文件 5 6解题和算法描述 2020 1 26 25 intfac intm inti h h 1 for i 1 iusingnamespacestd include CH6Li11 cpp voidmain intm cin m cout m fac m endl 7 运行 8 验证结果 正确 2020 1 26 26 例6 12 根据汽车肇事线索 追查肇事汽车 P 114线索 甲 牌照3 4位相同 乙 牌号为31XXXX 丙 牌照5 6位相同 丁 3 6位是一个整数的平方 1 分析问题 3 4位相同 是同一个数字x 可从0至9作试探 5 6位相同 是同一个数字y 可从0至9作试探 3 6位是一个整数的平方 满足 xxyy n2 n的范围从 0011 1 2至 xxyy 1 2 2 参考程序 2020 1 26 27 includeusingnamespacestd voidmain inti j k c for i 1 i k if c c k cout 牌照号码是 310000 k endl 运行结果 牌照号码是 317744 2020 1 26 28 6 6 2常用过程设计算法的描述方法1 传统流程图符号开始结束框输入输出框处理框判断框程序流方向线 连接框 2020 1 26 29 2 简单程序流程图ny 开始 输入数据 数据处理 结束否 输出数据 结束 2020 1 26 30 可重载运算符 运算符重载函数的定义格式 类型operator运算符 参数表 函数体 其中 函数名为operator运算符 运算符重载函数的调用方式 方式1 与原运算符相同的调用方式如 a b方式2 一般函数调用方式如 operator a b 相当于a b 2020 1 26 31 函数间的数据传递 1 通过赋值参数和返回语句 2 通过全局变量 3 通过指针类型参数 4 通过引用类型参数 5 通过函数的数组类型参数 2020 1 26 32 运算符重载 运算符重载是对已有的运算符赋予多重含义必要性C 中预定义的运算符其运算对象只能是基本数据类型 而不适用于用户自定义类型 如类 实现机制将指定的运算表达式转化为对运算符函数的调用 运算对象转化为运算符函数的实参 编译系统对重载运算符的选择 遵循函数重载的选择原则 2020 1 26 33 规则和限制 可以重载C 中除下列运算符外的所有运算符 只能重载C 语言中已有的运算符 不可臆造新的 不改变原运算符的优先级和结合性 不能改变操作数个数 经重载的运算符 其操作数中至少应该有一个是自定义类型 2020 1 26 34 两种重载形式重载为类成员函数 重载为友元函数 运算符重载函数声明形式函数类型operator运算符 形参 重载为类成员函数时参数个数 原操作数个数 1 后置 除外 重载为友元函数时参数个数 原操作数个数 且至少应该有一个自定义类型的形参 2020 1 26 35 例6 1 将 运算重载为复数类的成员函数 规则 实部和虚部分别相加减 操作数 两个操作数都是复数类的对象 2020 1 26 36 includeusingnamespacestd classcomplex 复数类声明 public 外部接口complex doubler 0 0 doublei 0 0 real r imag i 构造函数complexoperator complexc2 重载为成员函数complexoperator complexc2 重载为成员函数voiddisplay 输出复数private 私有数据成员doublereal 复数实部doubleimag 复数虚部 2020 1 26 37 complexcomplex operator complexc2 重载函数实现 complexc c real c2 real real c imag c2 imag imag returncomplex c real c imag complexcomplex operator complexc2 重载函数实现 complexc c real real c2 real c imag imag c2 imag returncomplex c real c imag 2020 1 26 38 voidcomplex display cout real imag endl voidmain 主函数 complexc1 5 4 c2 2 10 c3 声明复数类的对象cout c1 c1 display cout c2 c2 display c3 c1 c2 使用重载运算符完成复数减法cout c3 c1 c2 c3 display c3 c1 c2 使用重载运算符完成复数加法cout c3 c1 c2 c3 display 2020 1 26 39 程序输出的结果为 c1 5 4 c2 2 10 c3 c1 c2 3 6 c3 c1 c2 7 14 2020 1 26 40 2020 1 26 41 2020 1 26 42 2020 1 26 43 2020 1 26 44 2020 1 26 45 2020 1 26 46 2020 1 26 47 2020 1 26 48 如何上大学
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!