缺省参数和函数重载

一、缺省参数

    1.概念

缺省参数是声明或定义函数时为函数的参数指定一个默认值;在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。

    2.分类

(1)全缺省参数

void FunTest(int a = 1, int b = 2, int c = 3)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
}

(2)半缺省参数

void FunTest(int a, int b, int c = 3)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
}

    3. 注意

(1)半缺省参数必须从右往左依次来给出,不能间隔给,下面的代码就是错误的

void FunTest(int a = 1, int b, int c = 3)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
}

(2)缺省参数不能在函数声明和定义中同时出现,下面的代码就是错误的

void FunTest(int a = 1, int b, int c = 3);

void FunTest(int a = 1, int b, int c = 3)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
}

(3)缺省值必须是常量或者全局变量

(4)把后缀名改为.c,将会编译错误

二、函数重载

    1. 概念

函数重载是函数的一种特殊情况,是指在同一作用域内,不同参数列表的函数,这组函数被称为重载函数,可以有一组具有相同函数名,常用来命名一组功能相似的函数,处理实现功能类似数据类型不同的问题,避免了名字空间的污染,对于程序的可读性有很大的好处。

    2. 条件

(1)名字必须相同

(2)参数列表一定不同(参数个数不同;参数类型不同;类型的次序)

(3)返回值类型是否相同没有关系

    3. 几个问题  

(1)extern “C”有什么作用?

在C++工程中在函数前加extern "C",就是将该函数按照C语言来编译

extern "C" int Add(int left, int right)
{
    return left + right;
}

(2)C语言中为什么不能支持函数重载?

在vs编译器中,编译.c文件时,只会给函数名之前加上”_”;,所以加入两个函数名相同的函数在编译之后的函数名也照样相同,编译器调用时会因为不知道到底调用哪个而报错

(3) C++中函数重载底层是怎么处理的?

在vs编译器中,编译.cpp文件时,虽然两个函数的函数名一样,但是他们在符号表中生成的名称不一样,例如

int Add(int left, int right)
{
    return left + right;
}

(?Add@@YAHHH@Z) 

’表示名称开始,‘?’后边是函数名,“@@YA”表示参数表开始,后边的3个字符HHH分别表示返回值类型,两个参数类型;“@Z”表示名称结束; 由于两个函数生成的符号表中的名称不一样,所以是可以编译通过的

猜你喜欢

转载自blog.csdn.net/xinwenhuayu/article/details/84312915
今日推荐