函数定义
函数可以被看作是一个由用户定义的操作。函数一般用一个名字表示,即函数名函数的操作数称为参数,由参数列表指定函数的结果称为返回值,返回值的类型称为函数返回类型。函数执行的动作在函数体中指定。返回类型、函数名、参数列表和函数体构成了函数定义。
函数定义的语法形式为:
返回类型 函数名(参数列表){函数体}
函数声明
函数在使用之前必须声明。一个函数可以在程序中多次声明。函数定义也可以被用作声明,但是函数在程序中只能定义一次。
函数声明由函数返回类型、函数名和形参列表构成。
参数传递
在自定义函数内自设的参数称为形参,在主函数参与运算的称为实参。在调用自定义函数时需要将实参传给形参在自定义函数完成运算,然后返回数据给主函数得出结果。因此在函数中参数调用尤为重要。
参数传递主要有三种形式,传值;传址;传引用。
传值使用方法:
#include <iostream>
using namespace std;
int test (int left, int right){
return left+right;
}
int main(){
int lval=2;
int rval =3;
int result =test( lval, rval);
}
只能够返回一个值给主函数。
传址使用方法:
#include<iostream>
using namespace std;
void pswap(int *pvl, int *pv2){
int t;
t=*pv1;
*pv1=*pv2;
*pv2=t;
}
int main(){
int ivall =10;
int ival2=20;
int *p1 = &ivall;
int *p2=&iva12;
cout<<ivall<<""<<ival2<<endl;
pswap(p1,p2);
cout<<ivall<<""<<ival2<<endl;
}
将参数声明为指针,用变量的地址实施调用。
可以通过指针返回多个值。
传引用使用方法:
#include<iostream>
using namespace std;
void a(int& x,int& y)
{
int t;
x=y;
y=t;
}
int main()
{
int ival=19;
int ival1=20;
cout<<ival<<" "<<ival1<<endl;
a(ival,ival1);
cout<<ival<<" "<<ival1<<endl;
}
函数重载
C++的函数重载机制允许多个函数共享同一个函数名,但是针对不同的参数类型提供不同的操作。
如果同一个作用域内的几个函数名字相同但形参列表不同,则它们是重载函数。
void print (const int *b,const int *e){...}
void print (const int ia[],size-t size){...}
void print (const char *cp){...}
重载函数的名字相同,但它们的参数表必须不同:或者参数个数不同,或者参数类型不同。返回类型不能区分两个重载函数,因为调用时可以忽略函数的返回值。
重载函数的调用:
编译器根据调用的实参类型和个数,确定调用的是一组重载函数的哪一个在这个过程中可能应用隐式类型转换。
重载函数的判断:
如果两个函数的参数表中参数的个数或类型不同,则这两个函数是重载的。
如果两个函数的返回类型和参数表都精确匹配,则认为是同一函数的重复声明。
如果两个函数的参数表相同,但返回类型不同,则认为是错误的重复声明。
如果两个函数的参数表中,只有默认参数值不同,则认为是重复声明。
参数类型是 const或 volatile 时,对函数声明的识别并不影响。但是如果一个程序中同时提供两个函数定义,而这两个定义中参数的区别只是 const或 volatile定符时会产生重复定义错误。如果 const volatile用在指针或引用参数上,在判断函数声明是否相同时,需要考虑 const 和volatile修饰符。