当前课程知识点:C++语言程序设计基础 >  第3章 函数 >  实验三(下)函数的应用 >  实验三(下)函数的应用

返回《C++语言程序设计基础》慕课在线视频课程列表

实验三(下)函数的应用在线视频

下一节:导学

返回《C++语言程序设计基础》慕课在线视频列表

实验三(下)函数的应用课程教案、知识点、字幕

大家好

欢迎来到实验3的下半部分

本章的主要目标

是将一段功能独立的程序

写成函数

为今后的对象

和类的学习

打下一个良好的基础

本部分的实验内容

是通过练习

请大家进一步地理解和掌握

重载函数的使用

系统函数的使用

以及进一步熟悉step into

来跟踪程序的方法

在实验3我们介绍了

step into功能

利用它可以跟踪到函数的内部

再配合run to coursor

也就是运行到光标处

这样的功能

可以帮助我们进一步地理解

函数的执行过程和参数的传递

本章还给大家介绍了重载函数

为了方便使用

C++允许在同一范围内

定义几个功能接近

而名字相同的函数

不过这些同名的函数

它的形式参数必须不同

它经常被用来处理功能接近

但是数据类型不同的问题

也是多态性的一种体现

在接下来的第一个例子里

我们将来体会

和熟悉一下重载函数

除了自己编写函数

复用他人的函数

在C++中

还有大量现成好用的系统函数

如果弃之不用

而是一行一行的自己重头写

无异于重新发明文字

本部分的第二个例子

就是一个

使用系统函数的简单应用

首先我们来看例题一

分别编写四个同名函数

函数名叫max1

实现函数的重载

这四个函数

可以分别来求取

两个整数的最大值

三个整数的最大值

两个双精度数的最大值

和三个双精度数的最大值

最后要求在main函数中来测试

上述四个重名函数的函数功能

我们来看一下

我们已经准备好的代码

我们在这里有四个函数

那么它们的函数名字

是相同的

都是max1

那来看第一个重载形式

有两个形式参数

均为int

返回值也是int

它是用来计算

两个整数最大值的函数的函数体

那么我们再来看一下

三个整数最大值

如何去求取呢

我们可以看到

这个语句非常简捷

我们使用了一条return语句

就把这个函数的功能完成了

这是因为我们在这里

复用了一下

刚才有两个int参数的

这个max的重载形式

那么它的意思就是

先把x和y的最大值求出来

然后再把x y中最大的那一个

和z进行比较

然后再把它们比出来的最大值

作为函数值进行返回

所以我们在这里可以看到

刚才的这个有两个int形参

这个max1重载形式呢

在这里成了一个被调用的函数

而主要函数就成了

有三个int类型

形参的这个max1重载形式

那么到了main函数中呢

我们又会把main函数

作为主调函数

然后把具有三个int类型

形参的max1的重载形式

作为被调函数

所以同样一个函数

它有的时候是作为主调函数

有的时候会作为被调函数

是依情况而定的

那么在这里呢

需要给大家提到的一点就是

如果我们想去比较两个

双精度浮点数大小的时候

或者是一般浮点数大小的时候呢

因为它的1.4节中

讲到它的存储形式

所以你不能简单地

用x是否等于y这种方式来判断

而应该用x-y的绝对值

小于某一个

你可以容忍的精度来判断

这两个双精度数是是否相等

那么实现了这两个双精度数

最大值的这样一个

函数的重载形式呢

那么

我们去实现三个双精度数的

最大值的函数重载形式

就非常简单了

我们在这里看到

我们刚才用到的abs这个函数

它的作用呢

它是系统自带的一个标准库函数

是用来求某一个数

它的绝对值的

那么它求绝对值是放在数学函数

这个库里面

所以如果我们要使用它呢

先要在最前面的include

编译预处理指令中

把cmath包含进来

那么刚才我们看完了

四个不同重载形式的

函数体的声明和实现

那我们再来看一下

用main函数怎么去测试

和调用它们的这个功能

显然我们需要有

至少三个整数

和至少三个双精度浮点数

才能完成上述的测试

首先提示用户输入三个整数

a b和c的值

接下来呢

就去调用一下

求两个整数最大值的重载形式

接着再去调用

求三个整数最大值的函数

那同样地

我们去调用带有两个

双精度数参数的这样一个

求最大值的函数

和求三个双精度数最大值的

这样一个重载形式的函数

那接下来我们还是通过

我们刚才讲的逐语句的跟踪

来跟踪一下函数的调用

那么一开始呢

它是停留在

这个main函数的第一行的

也就是这里的第21行

我们可以看到

在这里呢

我们有int类型的a b c

尚未初始化

还有double类型的m n和l

也尚未初始化

我们把光标设置在这里

也就是在

读入了a b c三个整数之后

来计算一下a和b的最大值

我们来输a b c

今天是2015年的3月23日

那么这个时候我们可以看到

程序停在这里

a b c的值被初始化了

通过键盘初始化为2015 3

和23

接下来我们就应该调用

求两个整数最大值的

这样一个重载形式

那么我们用f11来跟踪一下

我们在调用栈里头可以看到

这个时候呢

调用max1这样一个重载形式

两个int类型的这样的形参

那这个时候呢

因为是要比较a和b的大小

那么a和b刚才分别是2015和3

那么进行了形实结合

之后

这个局部变量x和y的值呢

就变成了2015和3

通过这个调用栈可以看到

我们现在运行到了

光标所处的位置

回到了main函数刚才调用的地方

这个时候呢

调用返回来一个临时无名的整型

它的值呢

刚好就是a和b最大值2015

我们再来看一下

这个时候就打印输出了

2015和3的最大值

求出来是2015

接下来

大家还可以用类似的方式

去跟踪一下

求三个整数最大值的情形

后面会请求用户

进行浮点数的输入

并且把它们的最大值求出来

进行输出

我们在这里呢

就不一一跟踪了

大家回去可以试一下

独立地去跟踪一下这个过程

去体会一下主调函数

被调函数

还有返回的整个过程

接下来我们来看例题二

在main函数中提示输入两个整数

x和y

使用cin语句得到x和y的值

然后调用pow函数

来计算x的y次幂的结果

再显示出来

需要注意的是

我们尽管可以自己编写一个程序

来把y个x累次相乘

然后来计算x的y次幂

但是

因为在我们的标准系统库函数

cmath库中

包含这样一个pow函数

可以直接来计算求得x的y次幂

所以我们这个例子呢

主要是要来展示一下

如果使用系统函数

来完成这样的功能

我们来看一下

已经准备好的例子程序

在这里有两个int类型的变量

分别是x和y

然后提示用户进行x y值的输入

通过cin把x和y的键盘输入读入

接下来打印输出一下

x的值和y的值

然后再调用一下

cmath中的pow这个函数

就完成了x的y次幂计算结果

大家看一看

利用了这个系统函数

我们整个功能的实现

是不是非常非常的简便呢

在这里求x的y次幂

虽然也可以自己写函数来实现

但是调用系统函数的好处

不仅仅是方便快捷

还有一个好处是既安全

又稳定

所以只要是系统函数

已经提供了的功能

就希望大家尽量充分地利用它

而不要再去做

重新发明文字的这样的事情

由于pow这个函数

是在cmath库中预先定义好的

所以如果你要去使用它的话

一定要在

记得在最开始的位置

用编译预处理指令include

来把它包含进来

这样我们的编译器

才能够知道pow这个函数

从而而来

它的定义是什么

它的函数体是什么

具体实现怎样的功能

接下来

我们用step into跟踪一下

看看怎么样

执行调用到系统库中去的

还是通过f1

那这个时候呢

我们的光标

停在了main函数的第1行

在调用栈显示行数是第12

这里

那我们在这里声明了两个

int类型的变量x y

都没有进行初始化

我们把光标设置在这个

调用pow函数的位置

那我们比如说想

求x是9

9的3次方 那y就是3

我们在这里打印输出了

刚才读入的x和y的值

分别是9和3

接下来就进行了函数的调用

我们用f11

来跟踪到pow函数的内部

可以看到

它已经跳转到了

另外一个头文件中去

这是我们系统库函数

自带的头文件

那么它会停在pow函数的

这样的第一行的位置

然后进入这个函数的调用

当调用结束之后呢

它又会退回到

main函数的第25行

也就是

调用pow函数的这个地方

同时呢

pow这个函数调用返回的结果

会以一个

临时无名变量的形式返回

结果是729

而且是double类型的

然后会把729输出

那么这个例子很简单

我们的例子就到这里

那大家回去以后呢

可以做一个扩展练习

就是试着用一下

系统函数中的三角函数

来做一下各种不同

三角函数计算的练习

记住一定要用

include编译预处理指令

把cmath这个库包含进去

在实验3的下半部分

我们通过例子

进一步熟悉了重载函数

和系统函数

并利用step into功能

跟踪到函数调用的内部

也理解函数的执行过程

和参数传递

重载函数的一个主要好处是

功能相似的多个函数

共用同一个名字

这样我们在调用的时候

只要根据参数表的不同

就能自动地调用

对应的重载形式

不用记录多个不同的名字了

关于重载函数

一定要注意

重载函数的参数个数

和类型一定要不同

即要么参数的类型不同

要么参数的个数不同

要么参数的类型和个数

都不同

否则编译器就不知道

该调用哪一个重载函数了

了解并且利用好系统函数

可以使得我们获得

事半功倍的好处

在使用时

记得要用include指令

把系统函数所属的库包含进来

实验3的下半部分就到这里

我们下次再见

C++语言程序设计基础课程列表:

第1章 绪论

-导学

--第1章导学

-计算机系统简介

--计算机系统简介

--计算机系统简介 测试题

-计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展 测试题

-面向对象的基本概念

--面向对象的基本概念

--面向对象的基本概念 测试题

-程序的开发过程

--程序的开发过程

--程序的开发过程 测试题

-信息的表示和储存

--计算机中的信息与存储单位

--计算机的数字系统

--数据的编码表示

--信息的表示和储存 测试题

-实验指导

--实验一:VS开发环境介绍

第2章 C++简单程序设计(一)

-导学

--第二章导学

-C++语言概述

--C++的特点和程序实例

--C++字符集和词法记号

--C++语言概述 测试题

-基本数据类型、常量、变量

--基本数据类型、常量、变量

--程序举例

--基本数据类型、常量、变量 测试题

-运算与表达式

--算术运算与赋值运算

--逗号运算、关系运算、逻辑运算和条件运算

--Sizeof运算、位运算

--运算优先级、类型转换

--运算与表达式 测试题

-实验二:简单程序设计(上)

--实验二:简单程序设计(上)

第2章 C++简单程序设计(二)

-数据的输入和输出

--数据的输入和输出

--数据的输入和输出 测试题

-选择结构

--if语句

--switch语句

--选择结构 测试题

-循环结构

--循环结构——while语句

--do-while语句

--for语句

--嵌套的控制结构、其他控制语句

--循环结构 测试题

-自定义类型

--自定义类型

--自定义类型

-第2章小结

--第二章小结

-实验二:C++简单程序设计(下)

--实验二C++简单程序设计(下)

第3章 函数

-导学

--导学

-函数定义

--函数定义

--函数定义 测试题

-函数调用

--函数调用(例3-1)

--例3-2

--例3-3

--例3-4

--例3-5

--例3-6

--函数调用 测试题

-嵌套与递归

--函数的嵌套调用(例3-7)

--函数的递归调用(例3-8)

--例3-9

--例3-10

--嵌套与递归 测试题

-函数的参数传递

--函数的参数传递

--函数的参数传递 测试题

-引用类型

--引用类型(例3-11)

--引用类型 测试题

-含有可变参数的函数

--含有可变参数的函数

--含有可变参数的函数 测试题

-内联函数

--内联函数(例3-14)

--内联函数 测试题

-constexpr函数

--constexpr函数

--CONSTEXPR函数课后习题

-带默认参数值的函数

--带默认参数值的函数

--默认参数值例(3-15)

--带默认参数值的函数 测试题

-函数重载

--函数重载(例3-16)

--函数重载 测试题

-C++系统函数

--C++系统函数(例3-17)

--C++系统函数习题

-第3章小结

--第三章小结

-实验三(上)函数的应用

--实验三(上)函数的应用

-实验三(下)函数的应用

--实验三(下)函数的应用

第4章 类与对象

-导学

--导学

-面向对象程序的基本特点

--面向对象程序的基本特点

--面向对象程序的基本特点 测试题

-类和对象

--类和对象的定义

--类和对象的程序举例

--类和对象 测试题

-构造函数

--构造函数基本概念

--构造函数例题(1)——例4-1

--构造函数例题(2)——例4-2

--委托构造函数

--复制构造函数

--复制构造函数调用举例

--构造函数 测试题

-析构函数

--析构函数

--析构函数 测试题

-类的组合

--类的组合

--类的组合程序举例

--前向引用声明

--类的组合 测试题

-UML简介

--UML简介

--UML简介课后习题

-结构体与联合体

--结构体(例4-7)

--联合体(例4-8)

--结构体与联合体 测试题

-枚举类

--枚举类

--枚举类 测试题

-第4章小结

--第四章小结

-实验四(上)

--实验四(上)

-实验四(下)

--实验四(下)

第5章 数据的共享与保护

-导学

--导学

-标识符的作用域与可见性

--标识符的作用域与可见性

--标识符的作用域与可见性 测试题

-对象的生存期

--对象的生存期

--对象的生存期 测试题

-类的静态成员

--静态数据成员(例5-4)

--静态函数成员(例5-5)

--类的静态成员 测试题

-类的友元

--类的友元(例5-6)

--类的友元 测试题

-共享数据的保护

--共享数据的保护(例5-7)

--共享数据的保护 测试题

-多文件结构和预编译命令

--多文件结构和预编译命令(例5-10)

--多文件结构和预编译命令 测试题

-第5章小结

--小结

-实验五

--实验五

第6章 数组、指针与字符串(一)

-导学

--导学

-数组的定义与初始化

--数组的定义与使用

--数组的储存与初始化

--一维数组应用举例

--数组的定义与初始化 测试题

-数组作为函数的参数

--数组作为函数参数(例6-2)

--数组作为函数的参数 测试题

-对象数组

--对象数组

--对象数组 测试题

-基于范围的for循环

--基于范围的for循环

-指针的定义和运算

--指针的概念、定义和指针运算

--指针的初始化和赋值

--指针的算术运算、关系运算

--指针的定义和运算 测试题

-综合实例

--综合实例

-实验六(上)

--实验六上

第6章 数组、指针与字符串(二)

-指针与数组

--用指针访问数组元素

--指针数组

--指针与数组 测试题

-指针与函数

--以指针作为函数参数

--指针类型的函数

--指向函数的指针

--指针与函数 测试题

-对象指针

--对象指针

--对象指针 测试题

-动态内存分配

--动态分配与释放内存

--申请和释放动态数组(一)

--申请和释放动态数组(二)

--动态内存分配 测试题

-智能指针

--智能指针

-vector对象

--vector对象

--vector对象 测试题

-对象复制与移动

--深层复制与浅层复制

--移动构造

--对象复制与移动 测试题

-字符串

--C风格字符串

--string类

--字符串 测试题

-第6章小结

--第六章小结

-综合实例

--综合实例

-实验六(下)

--实验六(下)

实验三(下)函数的应用笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。