【c++学习笔记】缺省参数与函数重载

一:缺省参数

1.c语言与c++在对函数参数检测时的区别

  • 首先可以创建一个c工程,测试以下代码:
void func()
{
    return;
}

int main()
{
    func();
    func(10);
    func(10, 20);
    func('c');
}

这里写图片描述

  • 可以发现在c语言中,函数没有指定参数列表时,默认可以接收任意多个参数,但在c++当中呢?,工程换作c++再试试上面的代码能否通过编译
    这里写图片描述

  • 结果编译器会报错,这是因为c++对于函数参数检测更加严格,如果函数没有参数则不能接收任何参数。

2.缺省参数的概念

  • 缺省参数时生命或者定义函数时为函数参数指定一个默认值,在调用该函数是,如果没有传参,则使用默认值,否则,使用指定的实参。
void func(int a = 1)
{
    cout << a << endl;
    return;
}

int main()
{
    func();//没有传参使用默认值
    func(10);//传参,则使用指定的实参
}

这里写图片描述

3.全缺省与半缺省

  • 全缺省参数
void func(int a = 1, int b = 2, int c = 3)
{
    cout << "a = "<< a << endl;
    cout << "b = "<< b << endl;
    cout << "b = "<< c << endl;
}
  • 半缺省参数
void func(int a, int b = 2, int c = 3)//缺省值只能从右朝左给
{
    cout << "a = "<< a << endl;
    cout << "b = "<< b << endl;
    cout << "b = "<< c << endl;
}

注意:

  • 缺省参数不能同时在函数声明和定义中,只能二者则其一
  • 缺省值必须是常量或者全局变量

二:函数重载

1.基本概念

  • 函数重载势函数的一种特殊情况,c++允许在同一个作用域中声明几个功能类似的同名函数(c不支持),这些同名函数的形参列表(参数个数、类型、顺序)必须不同。
int add(int left, int right)
{
    return left + right;
}
double add(double left, double right)
{
    return left + right;
}

long add(long left, long right)
{
    return left + right;
}

int main()
{
    add(10, 20);
    add(10.0, 20.0);
    add(10l, 20l);
}

2.为什么c语言不能支持函数重载(测试环境:vs2013)

  • 最主要的原因就是c和c++编译器对于函数的重命名风格不同,比如一个函数的声明如下:
void function(int x,int y); 
  • 在c语言中,编译器在编译后在库中的名字为_function ,在c++中,编译器在编译后在库中的名字为_function_int_int
  • 还有一个函数的声明如下:
void functionfloat x,float y); 
  • 在c语言中,编译器在编译后在库中的名字为_function。而在c++中,编译器在编译后在库中的名字_function_float_float。在链接时,都是找名字进行链接的,就比如以上两个函数,在C语言中两个的名字一样,就会在链接中报错。C++中它们的名字不一样,所以就不会报错。

猜你喜欢

转载自blog.csdn.net/virgofarm/article/details/80663623
今日推荐