C++函数

本文介绍了C++中的函数概念,包括系统函数和用户自定义函数,无参与有参函数的定义方式。详细阐述了函数参数的类型,如形式参数与实际参数,以及返回值的传递。同时,讲解了函数调用的三种方式:函数语句、函数表达式和作为函数参数。此外,还讨论了函数的嵌套调用、递归调用和重载,展示了如何通过重载实现一个函数的多种功能。
摘要由CSDN通过智能技术生成

C++函数(第一部分)

在这里不对内置函数进行讲解,以后单独作讲解。

在c和c++中,函数是程序的重要组成部分,每个程序都必须有一个主函数。

人们往往还编写一些函数用来实现各种功能。

一个函数就是一个功能。


函数往往分为以下几种类型:

从用户的使用角度分为:

  • 系统函数,即库函数
  • 用户自己定义的函数

从函数的形式上看:

  • 无参函数
  • 有参函数

定义函数的一般形式

一般分为两种形式

定义无参函数

一般形式为:

类型名 函数名(void)

{

声明部分

执行语句

}

例如:

int main()
{
	int a;
	int b;
	cin >> a >> b;
	cout << a + b << endl;
	return 0;
}

这里以主函数为例,int类型的函数,返回一个整型量,在这里是return 0.

主函数名后的()为空说明为无参函数。


定义有参函数

一般形式为

类型名 函数名(形式参数列表)

{

声明部分

执行语句

}

例如:

int sum(int x, int y)
{
	return x + y;
}

return的作用是返回一个值给其他函数使用

例如

#include <iostream>
using namespace std;
int sum(int x, int y)
{
	return x + y;
}
int main()
{
	int a;
	int b;
	cin >> a >> b;
	int c = sum(a, b);
	cout << c << endl;
	return 0;
}

这里是返回一个值给主函数

运行结果为:
在这里插入图片描述

这个函数将a和b的值传递给x与y,并将x+y的值返回给c。


函数参数与实际参数

函数参数分为形式参数和实际参数两种。

形式参数

直接看例子:

int sum(int x, int y)
{
	return x + y;
}

规则;

  • 在定义函数时指定的形参,在未出现函数调用时,并不占用存储单元,因此称为形式形式参数或者虚拟参数,表示他们并不是实际存在的数据,只是发生在函数调用时,只有在调用是形参才会被分配存储单元,在调用结束后形参所占用的存储单元也会被释放。
  • 实参可以是常数、变量或表达式,例如:sum(3,a+b); 但要求a与b有确定的值。
  • 在定义函数时,必须在函数首部指定形参的类型。
  • 实参对形参的数据传递时值传递,即单行传递,只由实参传递给形参,不能由形参传递给实参。

函数的返回值

通过函数的调用使主调函数能够得到一个确定的函数值,这就是函数的返回值。

直接看例子:

#include <iostream>
using namespace std;
int sum(int x, int y)
{
	return x + y;
}
int main()
{
	int a;
	int b;
	cin >> a >> b;
	int c = sum(a, b);
	cout << c << endl;
	return 0;
}

在此程序中,**int sum(int x,int y)**函数的返回值类型为int,即整型。

不难看出,返回值类型为函数类型,即函数名前标注的类型。


函数的调用

函数调用的一般形式为:

函数名(实参列表)

函数的调用方式

按照函数在语句中的作用,大体可以分为以下3种函数调用方式

1.通过函数语句调用

把函数单独作为一个语句,并不要求函数带会一个值,只是要求函数完成一定的操作。

void printfok()
{
   cout<<"ok"<<endl;
}
int main()
{
   prinfok();
   return 0;
}

2.函数表达式

这里采用上面的例子

int sum(int x, int y)
{
	return x + y;
}
int main()
{
	int a;
	int b;
	cin >> a >> b;
	int c = sum(a, b);   //函数表达式
	cout << c << endl;
	return 0;
}

3.函数参数

函数的调用作为一个函数的实参

sum(a,sum(a,b));

对被调用函数的声明

在这里先说明一下被调用的函数需要满足的条件

条件如下:

  • 首先被调用的函数必须是一个已经存在的函数,可以是库函数,也可以是用户自己定义的函数。
  • 如果是库函数,需要将包含库函数的头文件用预处理命令#include包含进来。
  • 在使用自己定义的函数时,若被调用函数在调用函数在同一个程序单位中,且位置在调用函数之后,则必须对被调用函数进行声明。

在函数尚未定义的情况下,事先将该函数的有关信息通知编译系统,以便编译能够正常进行即为函数声明

例子如下:

#include <iostream>
using namespace std;
int sum(int x, int y);
int main()
{
	int a;
	int b;
	cin >> a >> b;
	int c = sum(a, b);
	cout << c << endl;
	return 0;
}
int sum(int x, int y)
{
	return x + y;
}

在此程序中,sum函数的定义在主函数之后,当主函数调用sum函数之前就必须对sum函数进行声明。

在这里进行一下说明:

函数的定义和函数的声明并不是同一回事

定义是对函数功能的确立,包括指定的函数名,函数类型,形参及其类型,函数体等,它是一个完整的,独立的函数单位。

声明的作用则是把函数的名字,函数类型以及形参的个数,类型和顺序(不包括函数体)通知编译系统,以便调用能够正常进行。

在函数的声明中也可以不写形参的形参名,例如:

int sum(int,int );

函数的嵌套调用

c语言和c++都是不允许对函数进行嵌套定义的。

也就是说一个函数的定义中不可以包含另一个函数的定义。

但是c++和c语言都允许嵌套调用函数。也就是说可以在调用一个函数的过程中,调用另一个函数。

例如:

#include <iostream>
using namespace std;
int max(int x, int y)
{
	if (x <= y)
		return y;
	else
		return x;
}
int sum(int x, int y)
{

	return max(x,y) + y;   //嵌套调用
}
int main()
{
	int a;
	int b;
	cin >> a >> b;
	int c = sum(a, b);
	cout << c << endl;
	return 0;
}

在此程序中,sum函数在调用过程中再次调用max函数。

运行结果如下:
在这里插入图片描述


函数的递归调用

在调用一个函数的过程中又出现直接或间接的调用该函数本身,称为函数的递归调用。

例如:

int sum(int x,int y)
{
   return sum(x,y)+y;
}

以上为直接调用。

int funtion1(int x,int y)
{
   return funtion2(x,y);   
}
int funtion(int x,int y)
{
    int z;
    z=x+y;
    return funtion1(z,y);
}

以上为间接调用,即为在调用其他函数的过程中调用自己本身。

在此程序中,funtion2函数在调用funtion1函数的过程中间接调用调用了自己本身。


函数的重载

对一个函数名重新赋予它含义,使一个函数名可以实现多用,即调用一个函数名可以实现不同的功能即为函数的重载

int sum(int x)
{
   return x+x;
}
int sum(int x,int y)
{
   return x+y;
}

以上为对sum函数进行重载,实现两种功能。

重载函数的参数个数,参数类型或参数顺序三者中必须至少有一种不同,函数返回值类型可以相同也可以不同。

return funtion1(z,y);

}


以上为间接调用,即为在调用其他函数的过程中调用自己本身。

在此程序中,funtion2函数在调用funtion1函数的过程中间接调用调用了自己本身。

---

## 函数的重载

对一个函数名重新赋予它含义,使一个函数名可以实现多用,即调用一个函数名可以实现不同的功能即为**函数的重载**

```c++
int sum(int x)
{
   return x+x;
}
int sum(int x,int y)
{
   return x+y;
}

以上为对sum函数进行重载,实现两种功能。

重载函数的参数个数,参数类型或参数顺序三者中必须至少有一种不同,函数返回值类型可以相同也可以不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是舅舅啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值