⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++5.dat

📁 C++指令字典 一个方便的软件 用于C++指令的查询
💻 DAT
📖 第 1 页 / 共 2 页
字号:
第五章 函数

第一节 函数的定义

  语句是构造程序的最基本单位.当我们用程序语句编写的程序越来越大,越来越复杂的时候,为了使程序更简洁、可读性更好、更便于复用,以及更便于维护,就有必要将把它分成若干个模块,每个模块完成一项任务.在C++中,这些模块就是一个个的函数.函数也是C++语言构造程序的重要的基本单位.
函数定义的一般形式如下: 
  返回类型 函数名(参数表列)
  {
   语句系列
   return 合适类型数值
  } 
  函数的定义包括以下几个部分:
  1. 函数名
  2. 参数表列
  3. 返回类型
  4. 函数体 

    1. 函数名: 一个符合C++语法要求的标识符,定义函数名与定义变量名的规则是一样的,但应尽量避免用下划线开头,因为编译器常常定义一些下划线开头的变量或函数.函数名应尽可能反映函数的功能,它常常由几个单词组成.
  如VC中的按下鼠标左键的响应函数为:OnLButtonDown,这样就较好的反映了函数的功能.在上例中,我们可以将"买票"和"订旅馆"作为函数名. 
  2. 参数表列:0个或多个变量,用于向函数传送数值或从函数带回数值,每一个参数都有自己的类型,它不同于变量定义,因为几个变量可以定义在一起,例如?quot;int i,j,k;".如果参数表列中参数个数为0,我们称之为无参函数,无参函数可以定义为:
    "返回类型 函数名( ){…}"或"返回类型 函数名(void){…}" 
  旅行日程和目的地就是我们传送给上例中的函数的数值,当然如果你对日程和目的地都没有什么特殊的要求,那也可以完全交给旅行社一手包办,这样便相当于一个无参函数了. 
  3. 返回类型:指定函数用return返回的函数值的类型,如果函数没有返回值,返回类型应为void.
  上例中返回值就是旅行社将要交给你的票和单据,而返回值的类型则可以看成是票和单据的类别. 
  4. 函数体:花括号中的语句称为函数体,一个函数的功能,通过函数体中的语句来完成.
  上例中的函数体即为旅行社为买票和订旅馆进行的具体操作. 
  下面我们看一个具体的函数定义的例子:  
  int GetIntegerInRange(int low, int high)
{
 int res;
 do {
  cout << "Enter an integer in the range " << low
  << " ... " << high << " :";
  cin >> res;
  } while (! ((res >= low) && (res <= high)));
return res;
}  
 
  int GetIntegerInRange(int low, int high)行定义函数名为GetIntegerInRange,返回类型为int,且指定函数需要两个整型值,并通过low和high引用.在函数体内定义了整型变量res,并通过return语句返回该变康闹怠?注意)变量res的类型必须与函数的返回类型一致,否则,系统以函数返回类型为准,而对res的数值进行强制类型转换,使其与函数的返回类型保持一致. 

 return语句的返回值通常是一个表达式,例如5-2: 
  一个函数也可以有多个return语句,在函数的执行过程中,遇到任一个return语句,将立即停止执行,并返回到调用函数.
例:
  return res;
  return n % MAXSIZE;
  return 3.5 + x*(6.1 + x*(9.7 + 19.2*x)); 
  上面的return语句也可以写成下面的形式:
  return (res);
  return (n % MAXSIZE);
  return (3.5 + x*(6.1 + x*(9.7 + 19.2*x))); 
 
  即对返回值的表达式加一对圆括号.不过,这圆括号是多余的,可以省略掉.

这里我们用一个很简单的函数定义的例子5-4来进一步加以说明:
 int Inc(int a)
{
 a++;
 return a;
} 
 
  这个函数的功能为增1,其中,int Inc(int a)行定义了:函数名-Inc,参数-整型数a,返回类型-整型,这说明该函数中用return语句返回的值应该是整型值.在花括号中的即为函数体,这个函数比较短,其函数体只有两行语句:
    a++;
    return a;
  这两行语句完成a自增1的功能,返回的是a增1后的值,返回值与返回类型是匹配的.下面是一个不带有参数和返回值的函数. 


第二节 函数的说明

如果一个函数调用另一个函数,在调用函数中必须对被调用函数进行说明,函数说明类似于函数定义,不过没有实现代码,函数说明的一般形式如下:
  返回类型 函数名(参数表列);
  函数说明是一个语句,所以要以分号结束.C++中,函数说明也称为函数原型,下面是函数说明的例子: 
  void PrintStats(int num, double ave, double std_dev);
  int GetIntegerInRange(int low, int high); 
  一些函数的说明,我们放在头文件中,也有一些函数的说明放在文件的头部,而函数的定义放在该文件后面.我们知道,C++应用程序是从main函数开始执行,main函数在文件中的位置并没有特别的要求,它可以在文件的头部、中部或尾部.


第三节 函数的定义

我们定义了一个函数,完成某种功能,就要涉及到调用这个函数,调用一个函数之前必须对该函数进行说明.函数调用由函数名和函数调用运算符()组成,()内有0个或多个逗号分隔的参数(称为实参).每一个参数是一个表达式,且参数的个数与参数的类型要与被调函数定义的参数(称为形参)个数和类型匹配.
  当被调函数执行时,首先计算实参表达式,并将结果值传送给形参,然后执行函数体,返回的返回值被传送到调用函数.
  如果函数调用后有返回值,调用表达式可以用在表达式中,而无参函数的调用是一个单独的语句.

我们定义了一个函数,完成某种功能,就要涉及到调用这个函数,调用一个函数之前必须对该函数进行说明.函数调用由函数名和函数调用运算符()组成,()内有0个或多个逗号分隔的参数(称为实参).每一个参数是一个表达式,且参数的个数与参数的类型要与被调函数定义的参数(称为形参)个数和类型匹配.
  当被调函数执行时,首先计算实参表达式,并将结果值传送给形参,然后执行函数体,返回的返回值被传送到调用函数.
  如果函数调用后有返回值,调用表达式可以用在表达式中,而无参函数的调用是一个单独的语句.
例如: 
#include<iostream.h> //C++库函数说明
int area(int length, int width); // area函数说明
void main() //主函数,程序从该函数开始执行
{
 int this_length, this_width; 
 cout << "Enter the length: "; //调用cout和cin库函数
 cin >> this_length;
 cout << "Enter the width: ";
 cin >> this_width;
 cout << "\n"; 
 cout << "The area of a " << this_length << "x" << this_width;
 cout << " rectangle is " << area(this_length, this_width); //调用area函数
}
int area(int length, int width) // area函数定义
{
 int number;
 number = length * width;
 return number;
} 

3.1 对于无参函数的调用形式应该是:
  函数名( )
  例如,对于函数:
  int TPSOKTSNK();
  可以这样调用:
  if(TPSOKTSNW()) {
   语句系列
  }
  如果调用形式写成:
  if(TPSOKTSNW) {
   语句系列
  }
  它仍然符合C++语法,但意义发生了变化.它是检查函数TPSOKTNSW()是否有地址,有关地址的概念,我们在后面要讲到.如果该程序连接成功,则TPSOKTNSW()有地址,if语句的条件为真.
例如:
#include <iostream.h>
int max(int a,int b)
{
 if(a>b)return a;
 else return b;
}
void main()
{
 int max(int a,int b);
 int x,y,z;
 cout<<"input two numbers"<<endl;
 cin>>x>>y;
 z=max(x,y);
 cout<<"maxmum="<<z;
}
 
程序的第2行至第6行为max函数定义.进入主函数后,因为准备调用max函数,故先对max函数进行说明(程序第9行).可以看出函数说明与函数定义中的函数头部分相同,但是末尾要加分号.程序第13行为调用max函数,并把实参x、y传送给max的形参a、b.max函数执行的结果 (a或b),返回给调用函数main中的变量z,且main函数将z值输出.

3.2参数传递
  我们已经知道:函数调用时,要将调用函数中实参传送给被调函数中的形参.在C++中,有两种参数传递方式,即值传递和地址传递(或称引用传递).地址传递我们在后面介绍,这里介绍值传递的方法. 
  函数在被调用以前,形参变量并不占内存单元,当函数被调用时,形参变量分配有存储单元,并将相应的实参变量存储单元的值复制到形参变量单元.所以,被调函数在执行过程中,如果形参变量的值发生了变化,并不影响实参变量的值.例如:
 #include <iostream.h>
void Foo (int num)
{
 num = 0;
 cout << "num = " << num << '\n';
}
int main (void)
{
 int x = 10;
 Foo(x);
 cout << "x = " << x << '\n';
 return 0;
} 
 
 
  函数Foo有一个形参变量num,当它在main函数中被调用时,实参变量x的值传送到num,且x和num在不同的内存单元中.在函数Foo中,虽然num被设置为0,但并不影响x的值,程序运行结果如下:
  num = 0;
  x = 10;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -