第五周 C++问题的模块化求解

第五周 C++问题的模块化求解

5.1模块化程序设计

模块化程序的组成

编写一个规模较大的程序,可按其功能划分为若干相对独立的模块。
好处:

  • 程序开发更易控制
  • 利于软件复用
  • 避免重复代码
  • 容易调试和维护

函数的概念:

main()主函数、库函数(标准函数)、用户定义函数

5.2函数的定义

###函数的定义
1、函数定义的一般格式:
<函数返回值类型> <函数名>(<形式参数表>) //函数头

语句序列; //函数体

2、函数值类型-即函数的返回值类型
(1)返回简单类型:int、long、float、double、char等
(2)返回结构类型
(3)返回指针类型
(4)返回引用类型
(5)无类型、空类型:void
3、形式参数表(形参表)
函数的参数表应用于实现函数间的数据联系。
格式:<类型名1> <形参名1>,<类型名2> <形参名2>,…
注意:每个形参必须同时给出形参的类型和名称;函数也可以没有参数。
//形参是在函数调用时分配存储空间,同时接受实参的值。当函数执行结束后,系统将自动释放形参所分配的存储空间。因此,形参属于函数的局部变量,只能在该函数中使用。
当形参为引用类型或指针类型是,利用形参不仅可以访问实参的值,还可以改变实参的值。
4、函数体
由{}括起来的语句序列构成,是实现函数功能的主体。

5.3函数的声明

函数的声明

在C++中,程序编译的单位是源程序文件(即源文件),一个由多个函数构成的程序可以组织存放在一个或多个源文件中。
在源文件中,应满足”先定义后使用”的原则。
标准库函数:用#include命令包含头文件
自定义函数:要么在调用之前定义,要么在调用之前作函数声明。

函数的声明格式:

<类型名> <函数名>(<类型1> <形参1>,<类型2> <形参2>,…) ;
或者
<类型名> <函数名>(<类型1>,<类型2>,…) ; //可省略形参名
函数声明说明了函数所采用的形式,称为函数原型。

5.4函数的调用格式

函数的调用

  • 函数定义后,并不能自动执行,必须通过函数调用来实现函数的功能。
  • 函数调用,即控制执行某个函数。
  • C++中,主函数可以调用其他子函数,其他子函数之间也可以相互调用。

函数调用的格式:

一般格式:<函数名> (<实际参数表>) //有参调用
或者 <函数名> () //无参调用
实参表与形参表中参数的个数、类型和次序应保持一致。
当调用无参函数时,函数后圆括号不能省略。
1、实参的几种形式
形参为简单类型变量----实参:常量、变量以及表达式
形参为数组====实参:数组(名)
形成为结构体类型----实参:结构类型变量
2、函数调用的形式
(1)作为一个独立语句调用(用于无返回值函数)
(2)出现在表达式中(适于有返回值的函数)
3、函数的嵌套调用
就是指调用一个函数的过程中,被调用函数又调用了另一个函数。

5.5函数的传递方式

C++中有又三种传递方式:值传递、引用传递、指针传递

1、值传递:

调用时,将实参的值传递给对应的形参。
由于形参有自己独立的存储空间,又作为函数局部变量使用,因此在函数中改变形参值不会对实参变量的值。
好处:减少函数之间的数据依赖,增强了函数自身的独立性。
注意:函数的形参声明为简单类型或结构类型变量,实参与形参将采用值传递。

2、引用传递:

(1)引用:
引用是一种特殊的额变量,它被认为是一个变量的别名。
格式: <目标变量数据类型> &<引用名>=<目标变量名>;
例如: int a.&b=a;
此时,b为a的一个引用,使用a与使用b是等价的,二者共用内存空间。
定义一个引用时,如果该引用不是用作参数或返回值,则必须提供该引用的初值(即必须提供引用的目标变量名)
(2)引用传递:
为实现引用传递,这时函数的形参应定义为引用类型变量,而对应的实参应为变量名,该变量将用作引用的目标变量名。
作为形参的引用变量并不分配新的内存空间,它作为实参变量的别名,与其共用内存。
好处:

  • 使用引用参数可以直接操作实参变量,从而实现通过修改形参的值而达到修改对应实参值的目的。
  • 通过设置多个引用参数,可以从函数中带回多个结果值。
    说明:引用作为形参,其引用的目标变量默认为调用该函数时对应的实参变量名,所以,在定义函数时,对于引用类型参数不必提供引用的初值。

5.6为形参指定默认值

C++语言允许在函数定义时,为形参指定默认参数值。
例如: void f(int x=0,inty=2);// 这时合法的
可以对部分形参定义默认值。
但这时,默认值应出现在从右到左连续若干个形参中。
例如: void f(int i=0,int j,int k=3);//这个是错误的,必须从右至左依次指定

5.7数组名作为函数的参数

  • 数组元素作实参:对应形参为变量,一次传递一个元素,采用值传递。
  • 数组名作实参,对应的形参为一个数组,一次传递一整个数组。
  • 且在数组作参数时,形参数组与实参数组共用同一暑促空间(即共用实参数组空间)。类似于引用传递,改变形参数组的值就是在改变实参数组的值。
    1、一维数组的传递:
    声明格式: <类型> <数组名>[]
    其中,[]可以省略数组的长度值。(可认为形参数组与实参数组长度相同)
    对应的实参应为同类型的一维数组名。(仅使用数组名)
    说明:为了使函数知道需要出列的数组元素的个数,通常给函数再传递一个表示元素个数的整型数。
    2、二维数组的传递:
    声明格式: <类型> <数组名>[][<列数>]
    其中:<列数>为常数,不能省略。

5.8结构体变量作为函数的参数

  • 实参为结构体类型变量
  • 形参也为同类型的结构变量
  • 传递方式为值传递
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值