函数小结
一、为什么要用函数
1.函数是什么?
函数是面向对象程序设计中,对功能的抽象。
2.为什么要用函数?
使程序更加模块化,便于阅读,修改。
避免重复的编程。
3.函数定义的语法形式。
类型标识符 函数名 (参数表)
{
函数体
}
实例
double power(double x, int n)
{
double val=1.0;
for(int i=0;i<n;i++)
val=val*x;
return val;
}
4.函数的返回值
函数的值必须用return返回。返回值的类型与函数值类型一般应相同。
由return语句给出。
无返回值的函数(void)类型不,不必写return语句。
5.函数的调用
调用前先声明函数原型:
-若函数定义在调用点之前,则无需另外声明。
-若函数定义在调用点之后,则需要在调用函数前声明原函数原型。
二、函数的重载
函数重载的定义
所谓函数重载是指完成不同功能的函数可以具有相同的函数名。
C++是根据函数的实参来确定调用哪一个函数的。
例如:
形参类型不同:
int add(int x,int y);
float add(float x,float y);
形参个数不同:
int add(int x,int y);
int add(int x,int y,int z);
函数重载例子
using namespaced std;
int add(int m,int n)
{
return m+n;
}
double add(double x,double y)
{
return x+y;
}
int main()
{
int m,n;
double x,y;
int add(int m,int n);
double add(double x,double y);
cout<<"Enter two integer:";
cout>>m>>n;
cout<<"integer"<<m<<'+'<<n<<'='<<add(m,n)<<endl;
cout<<"Enter two real number:";
cin>>x>>y;
cout<<"real number"<<x<<'+'<<y<<"="<<add (x,y)<<endl;
return 0;
}
三、函数的值传递和地址传递
值传递包括实实在在的值传递以及指针传递(指针传递参数本质上是值传递的方式,它所传递的是一个地址值),传递的都是实参的一个拷贝。
这样的值传递只能把一个函数中的值传递给另一个函数,当该值在被调函数中发生改变时,在原来的函数中并不会发生改变。因为被调函数的形参只有函数被调用的时候才会临时分配单元,一旦调用结束占用的内存便会释放,所以调用的函数中存储number的地址跟被调函数中num的地址不是一回事。
例子:
using namespaced std;
void function(int num){
num=100;
}
int main()
{
int number;
number=1;
function(number);
cout<<number<<endl;
return 0;
}
指针传递是通过地址间接的改变了实参的值。
例子:输入两个整数交换后输出
include
using namespaced std;
void swap(int *a,int b)
{
int t=a;
a=b;
*b=t;
}
int main()
{
int x=5,y=10;
cout<<"x="<<x<<"y="<<y<<endl;
swap(&x,&y);
cout<<"x="<<x<<"y="<<y<<endl;
return 0;
}
四、递归函数
函数可以直接或间接地调用自身,称为递归调用。
条件:
1.每一次调用自己时,必须是更接近于解。
2.必须有一个终止处理或计算的准则。
例子:计算n的阶乘
unsigned fac(unsigned n)
{
unsigned f;
if(n==0)
f=1;
else
f=fac(n-1)*n;
return f;
}
int main()
{
unsigned n;
cout<<"输入一个整数n";
cin>>n;
unsigned y=fac(n);
cout<<n<<"!="<<y<<endl;
return 0;
}