C++-020-函数

C+±020-函数-2020-3-8
函数

一、函数定义

一般形式如下

类型标识符 函数名(形式参数列表)
{
变量的声明
语句
}

类型标识符:用来标识函数的返回值类型,可以根据函数的返回值判断函数的执行情况,通过返回值也可以获取想要的数据。类型标识符可以是整型、字符型、指针型、对象的数据类型。
形式参数列表:由各种类型变量组成的列表,各参数之间用逗号间隔,在进行函数调用时,主调函数对变量进行赋值。
关于函数定义的一些说明如下:
(1)形式参数列表可以为空,这样就定义了不需要参数的函数如:

int ShowMessage()
{
int i=0;
cout<<i<<endl;
return0;
}

函数ShowMessage通过cout流输出变量i值。
(2)函数后面的大括号表示函数体,在函数体内进行变量的声明和添加实现语句。

二、函数的声明

调用一个函数前必须先声明函数的返回值类型和参数类型,例如

int Setindex(int i);

函数声明被称为函数原型,函数声明时可以省略变量名,例如

int Setindex(int);

三、空函数

没有参数和返回值,函数的作用域为空的函数就是空函数。

void setWorkSpace(){}

空函数存在的意义是在程序设计中往往需要根据功能分为若干模块,分别由一些函数来实现。而在第一阶段只设计最基本的模块,其他一些次要功能或锦上添花的功能则在以后需要时陆续补上。而在编写程序的开始阶段,可以在将来准备扩充功能的地方写一个空函数,这些函数先占一个位置,以后用一个编号的函数代替它。这样做,程序的结构清楚,可读性好,以后扩充新功能方便,对程序结构影响不大。
如下

四、形式参、实际参、默认参数、可变参数

形式参数,参数函数中的参数在函数声明和定义时被称为形式参数

int Function(int a,int b)

实际参数,在函数被调用时被赋予具体值称为实际参数

Function(3,4);

默认参数,采用默认值作为函数的实际参数,默认参数包含于实际参数中

void OutputInfo(const char *pchData="One world,one dream!)

可变参数,省略参数代表的含义是函数的参数是不固定的,也就是可变参数

void OutputInfo(int num,...)

1.形式参数与实际参数的区别
(1)在定义函数中指定的形参,在未出现函数调用时,它们并不占用内存中的存储单元。只有在发生调用时,函数的形参才被分配内存单元,在调用结束后,形参所占的内存单元也被释放。
(2)实参应该是确定的值。在调用时将实参的值赋值给形参,如果形参是指针类型,就将地址值传递给形参。
(3)实参与形参的类型应相同。
(4)实参与形参之间是单项传递,只能由实参传递给形参,而不能由形参传回来给实参。
实参与形参之间存在一个分配空间各参数值传递的过程,这个过程是在函数调用时发生的,C++支持引用型变量,引用型变量则没有值传递的过程,这将在后文讲过。
2.实际参数与默认参数的区别
(1)
实际参数是在调用时,如Function(3,4)
默认参数是在函数的开头括号里,如int Function(const char*pchData="One world,one dream!")

五、函数的调用

1.传值调用
2.嵌套调用(调用其他函数去调用其他函数)
3.递归调用(自身调用)

六、重载函数

定义同名的变量,程序会编译出错;定义同名的函数也会带来冲突的问题。C++中使用了名字重组的技术,通过函数的参数类型来识别函数,所谓重载函数就是指多个函数具有相同的函数名,而参数类型或参数个数不同,函数调用时,编译器以参数的类型及个数来区分调用哪个函数

int Add(int x, int y)
{
return x+y;
}
double Add(double x,double y)
{
return x+y;
}

七、内联函数

使用内联函数可以减少函数调用带来的开销(在程序所在文件内移动指针寻找调用函数地址带来的开销),但它只是一种解决方案,编译器可以忽略内联的声明。
应该在函数实现代码很简单或者调用该函数次数相当较少的情况下将函数定义为内联函数,内联函数只能在优化程序时使用。在抽象数据类设计中,它对支持信息隐藏起着主要作用。
如果某个内联函数要作为外部全局函数,即它将被多个源代码文件使用,那么就把它定义在头文件里,在每个调用该inline函数的源文件中包含该头文件,这种方法保证对每个inline函数只有一个定义,防止在程序的生命期中引起无意的不匹配。

#include<iostream>
using namespace std;
inline int integerAdd(int x,int y);
void main()
{
int a;
int b;
int iresult=integerAdd(a,b);
}
int integerAdd(int x,int y)
{
return x+y;
}

八、例子

1.求两数中的最大数

//求两数中的最大数
#include<iostream>
using namespace std;
int Max(int a,int b)//Max为一个子函数
{
	if(a>b)
	return a;//返回值a
	else
	return b;//返回值b
} 
int main()
{
	int x,y;
	cin>>x>>y;
	cout<<Max(x,y)<<endl;//此处调用了max这个函数,并将x,y值传递给了Max函数
    return 0;
}
2
3
3

--------------------------------
Process exited with return value 0
Press any key to continue . . .

2.求两数和

//加法函数
#include<iostream>
using namespace std;

float add(float x,float y)// 返回类型为float,有两个形参float x,float y
{
float z;//定义了z 
z=x+y; 
return z;//返回值z为float型,与返回值类型匹配
} 
int main()
{
	float x,y,z;
	cin>>x>>y;
	z=add(x,y);
	cout<<z<<endl;
	return 0;
}
1 2
3

--------------------------------
Process exited with return value 0
Press any key to continue . . .

3.判断素数

//判断素数函数
#include<iostream>
using namespace std;
void prime (int number);//对子函数的声明 
int main()
{
	int num;
	cin>>num;
	prime(num);
	return 0;
} 
void prime(int number)//无须返回值时,需要在前面加上void 
{
	int n,flag=1;//flag是否素数的标记
	for(n=2;n<number/2;n++)
	if(number%n==0)
	flag=0;
	if(number==1)
	{
	flag=0;	
	}
	if(flag)//如果flag为真
	cout<<number<<"是一个素数"<<endl;
	else
	cout<<number<<"不是一个素数"<<endl; 
} 
发布了91 篇原创文章 · 获赞 101 · 访问量 3305

猜你喜欢

转载自blog.csdn.net/weixin_41096569/article/details/104729097
今日推荐