C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章

上传人:E**** 文档编号:89343159 上传时间:2019-05-23 格式:PPT 页数:229 大小:766KB
返回 下载 相关 举报
C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章_第1页
第1页 / 共229页
C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章_第2页
第2页 / 共229页
C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章_第3页
第3页 / 共229页
C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章_第4页
第4页 / 共229页
C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章_第5页
第5页 / 共229页
点击查看更多>>
资源描述

《C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章》由会员分享,可在线阅读,更多相关《C++面向对象程序设计 教学课件 ppt 作者 李兰_ 第3章(229页珍藏版)》请在金锄头文库上搜索。

1、3.1 函数的定义和声明 (Function Definition and Declaration) 3.2 函数的调用与参数传递 (Function Call and Parameter Passing) 3.3 内联函数(Inline Functions) 3.4 函数重载(Function Overloading) 3.5 带默认形参值的函数 (Function with Default Arguments) 3.6 作用域与生存期(Scopes and Lifetime) 3.7 多文件结构(Multi-File Structure) 3.8 常见编程错误(Common Program

2、ming Errors) 本章小结(Chapter Summary) 习题3(Exercises 3),一个C+ 程序可由一个或多个源程序文件组成。一个源程序文件可由一个或多个函数组成。函数是构成C+ 程序的基础,任何一个C+ 源程序都是由若干函数组成的。C+ 中的函数分为库函数与自定义函数两类。,3.1 函数的定义和声明 (Function Definition and Declaration),3.1.1 函数的定义(Function Definition) 函数可以被看做是一个由用户定义的操作。函数用一个函数名来表示。 函数的操作数称为参数,由一个位于括号中并且用逗号分隔的参数表指定。

3、在C+ 程序中,调用函数之前首先要对函数进行定义。如果调用此函数在前,定义函数在后,则会产生编译错误。,1无参函数的一般形式 无参函数的一般形式如下: 类型说明符 函数名() 类型说明 语句 ,类型说明符指明了本函数的类型。函数的类型实际上是函数返回值的类型。此处的类型说明符与第2章介绍的各种说明符相同。 函数名是由用户定义的标识符。定义函数名与定义变量名的规则是一样的,但应尽量避免用下划线开头,因为编译器常常定义一些下划线开头的变量或函数。,在很多情况下都不要求无参函数有返回值, 此时函数类型说明符可以写为void。 例如: void Hello() cout“Hello world”end

4、l; ,2有参函数的一般形式 有参函数的一般形式如下: 类型说明符 函数名(形式参数表) 形式参数类型说明 类型说明 语句 ,在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,当然必须给以类型说明。 例如,定义一个函数, 用于求两个数中的大数,程序如下: int max(a,b) int a,b; if (ab) return a; else return b; ,这种格式不易进行编译系统检查,从而会引起一些非常细微而且难以跟踪的错误。新标准中把对形参的类型说明合并到形参表中,称为“现代格式”。 例如,max函数用现代格式可定义如下: int max(int a,int b

5、) if(ab) return a; else return b; ,【例3-1】 max函数的位置示例。 #include using namespace std; int max(int a,int b) if(ab)return a; else return b; void main() ,int max(int a,int b); int x,y,z; coutxy; z=max(x,y); cout“maxmum= “zendl; ,在C+ 语言中,所有的函数定义(包括主函数main在内)都是平行的。但是函数之间允许相互调用,也允许嵌套调用。 因此,C+ 程序的执行总是从main函数

6、开始,完成对其他函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C+ 源程序必须有且只能有一个主函数main。,3.1.2 函数的声明(Function Declaration) C+中函数声明又称为函数原型。标准库函数的函数原型都在头文件中提供,程序中可以用 #include指令包含这些原型文件。对于用户自定义函数,程序员应该在源代码中说明函数原型。函数原型是一条程序语句,它由函数首部和分号组成,其一般形式如下: 函数名();,函数声明和函数首部的异同如下: (1) 两者的函数名、函数类型完全相同。 (2) 两者中形参的数量、次序、类型完全相同。 (3) 函数声明中的形

7、参可以省略名称,只声明形参类型,而函数首部不能。 (4) 函数声明是语句,而函数首部不是。 (5) 当函数定义在调用它的函数前时,函数声明不是必需的;否则,必须在调用它之前进行函数声明。,如例3-1中max()函数定义在main()函数前,所以可以不用函数声明。但是如果把max()函数定义在main()函数之后,则应该写成如下形式: #include using namespace std; int max(int a,int b); /函数声明 void main() /主函数 ,int max(int a,int b); int x,y,z; coutxy; z=max(x,y); cou

8、t“maxmum= “zendl;, int max(int a,int b) /用户定义函数 if(ab)return a; else return b; ,【例3-2】 实现两个数相加。 程序如下: #include using namespace std; int add(int ,int); /函数原型 void main() ,int sum,x,y; coutxy; sum=add(x,y); /函数调用 cout“Sum=“sumendl; int add(int a,int b) /函数定义, return a+b; 运行结果: 请输入被加数和加数: 213 625 Sum=8

9、38,3.1.3 函数值和函数类型 (Function Values and Function Types) 1函数返回值与函数类型 通常函数被调用总是希望得到一个确定的值,即函数的返回值。函数的返回值确定了函数的类型,即函数类型就是返回值的类型。,1) 有返回值函数 此类函数被调用执行完后将向调用者返回一个执行结果,即函数返回值,数学函数即属于此类函数。例如: int sum(int a,int b) /有返回值,返回类型为整型 return (a+b); ,2) 无返回值函数 此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其他语言的过程。 例如: vo

10、id printsum(int a,int b) /无返回值 couta+bendl; ,2return语句 函数的返回值是通过return语句获得的。return语句的一般格式如下: return (表达式); 或 return 表达式; 或 return;,说明: (1) 返回值可以用括号括起来,也可以不括起来,还可以没有返回值。 (2) 一个函数如果有一个以上return语句,则当执行到第一条return语句时函数返回确定的值并退出函数,其他语句不被执行。,例如,下面函数的第二条return语句不能执行。 int fun() int a,b; return a; /该语句执行且返回a的值

11、 return b; /该语句不被执行 ,(3) return语句可以返回一个表达式的值。 (4) 在无返回值的函数体中可以没有return语句,函数执行到函数体的最后一条语句,遇到花括号“”时,自动返回到主调用程序。 (5) 如果return语句中表达式的值和函数的值其类型不一致,则以函数类型为准。 (6) 如果没有使用return返回一个具体的值,而函数又不是void型,则返回值为一个随机整数。,在C+ 语言中可从不同的角度对函数进行分类。 (1) 从函数定义的角度,函数可分为库函数和用户定义函数两种。 (2) 从主调函数和被调函数之间数据传送的角度,函数又可分为无参函数和有参函数两种。,

12、3.2.1 函数的调用(Function Call) 函数调用用一个表达式来表示。函数调用的一般形式如下: 函数名(实际参数表) 其中,函数名是由用户自定义或C+ 提供的标准函数名;实际参数表是由逗号分隔的若干个表达式,每个表达式的值为实参。实参用来在调用函数时对形参进行初始化,实参与形参的个数相同,类型一致,顺序一致。,3.2 函数的调用与参数传递 (Function Call and Parameter Passing),1函数调用的格式 在C+ 语言中,可以用以下几种方式调用函数。 1) 函数表达式 如果在函数定义时需要返回某个数值,则return语句后必须有表达式。 2) 函数语句 函

13、数调用的一般形式加上分号即构成函数语句。 3) 函数实参 函数实参是指函数作为另一个函数调用的实际参数出现。,2函数调用的过程 当调用一个函数时,整个调用过程分为以下三步进行: (1) 函数调用。 (2) 函数体执行,即逐条运行函数体中语句的过程。 (3) 返回,即返回到函数调用表达式的位置。返回过程执行的是函数体中的return语句。,3.2.2 函数调用时的参数传递(Parameter Passing) 参数传递称为“实虚结合”,即实参向形参传递信息,使形参具有确切的含义(即具有对应的存储空间和初值)。 1按值传递 以按值传递方式进行参数传递的过程为:首先计算出实参表达式的值,接着给对应的

14、形参变量分配一个存储空间,该空间的大小等于该形参类型的长度,然后把已求出的实参表达式的值一一存入到为形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。,【例3-3】 按值传递。 程序如下: #include using namespace std; void swap(int,int); void main() ,int a=3,b=4; cout“a=“a“,b=“ bendl; swap(a,b); cout“a=“a“,b=“ b endl; void swap(int x,int y) ,int t=x; x=y; y=t; 运行结果: a=3, b=4,关于按值传

15、递应当注意下面几个问题: (1) 形参在没有被调用时,不占用存储空间。 (2) 调用函数时,应该注意函数的实参与形参类型一致,否则会出现错误。 (3) C+函数中参数的求值顺序为自右至左,即C+函数中实参的值是从右到左确定的。,【例3-4】 函数参数的传递顺序。 程序如下: #include using namespace std; int some_fun(int a,int b) return a+b; void main() int x,y;,x=2; y=3; coutsome_fun(+x , x+y)endl; x=2; y=3; coutsome_fun(x+y , +x)endl; 运行结果: 8 9,2地址传递 如果在函数定义时将形参的类型说明成指针,则对这样的函数进行调用时就需要指定地址值形式的实参,这时的参数传递方式即为地址传递方式。与按值传递不同,地址传递把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。,【例3-5】 地址传递。 程序如下: #include void swap(int *,int *); void main()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号