c++ beginning(2)

来源:互联网 发布:mac ssh连接服务器 编辑:程序博客网 时间:2024/05/18 00:17

  函数的重载:

大多数编程语言要求对函数名设定为唯一的一个标识符,不能重复,在c++中却允许,也就是可以定义两个一样名字的函数,这就叫做函数吃的重载:两个以上的函数,取相同的函数名,但是形参的个数和类型不同,编译器根据实参和形参的类型几个数的最佳匹配,自动决定调用那个函数:

exp:

int max(int,int);

int max(int,int,int);

float max(float,float);

double max(double,double);

 

 

带默认形参值的函数:

c++中允许在函数说明或函数定义中为形参赋予一个默认的值,这样的函数就叫做带有默认值的函数:在调用带有默认值的函数时,若为相应形参指定了实参,则形参将使用实参的值,否则,形参将使用其默认值。

exp:

int sub(int x=8,int y=3)

{

return x-y;

}

 

void main(void)

{

 

sub(20,15);//传递给形参的x,y的值分别是2015

sub(10);//传递给形参的值分别是10,3有一个使用了默认的值

sub();//传给形参的值为83都使用了默认的值

}

 

(1)多个实参,自右向左定义;

(2)多个实参,若省去某个实参,则知道最优断的实参都要省去(再有默认值前提)

exp:

int f(int a, float b=5.0,char c='.',  int d=10);

  采用如下调用则错误:

f(2,,,3)//语法错误f(2,,,)这样是对的

(3)默认形参值的说明必须出现在函数调用之前,这就是说,如果存在函数原型,则形参的默认值应该在函数原型中指定;否则在函数中定义;另外,若函数原型中已给出了形参的默认值,则在函数定义中不能重复指定,即使多指定的默认值完全相同也不行

 

exp:

int sub(int x=8, int y=3);//默认形参的值在函数原型中给出

void main()

{

sub(20,15);

sub(10);

sub();

}

int sub(int x, int y)

{

return x-y;

}

 

(4)在同一个作用域,一旦定义了默认形参值,就不能在定义它。

exp:

int f(int a, float b, char c='.', int d=10);

int f(int a,float b, char c='.',int d= 10);//错:企图在此定义默认参数c,d

(5)如果几个函数说明出现在不同的作用域 内,则允许分别为他们提供不同的默认形参值。

exp:

int f(int a=6, float b=5.0, char c=‘.’,int d=10);

void main(void)

{

int f(int a=3, float b=2.0, char c='n', int d=20);

cout <<f()<<endl;

()

}

 

(6)对形参默认值的指定可以使初始化表达式,甚至可以包含函数调用

exp:

int f(int a, float b=5.0, char c='.', int d=sub(20,15));

(7)  在函数原型给出了形参的默认值时,形参可以省略

exp:int f(int,float 5.0, char =‘.’,int =sub(20,15));

 

函数的模板:可以用来创建一个通用功能函数,以支持多种不同形参,进一步简化重载函数的函数体设计

模板定义格式:
template <class 类名,class 类名,   >

返回类型 函数名(形参表)

{

函数体;

}

exp:

template<class T>

T add(T x, T y)

{

return x+Y;

}

下面的一个函数模板的参数表中带有形式参数:

template<class T, int size>

T sum(){.......}

模板---->模板函数

显式实例化:

函数名<具体类型名,具体类型名,。。。。。,常量表达式>(实参表)

隐式实例化:

 

原创粉丝点击