函数重载(Overload) 默认参数

函数名完全相同,但参数个数,参数类型和顺序不同的函数,彼此构成函数重载.C语言不支持函数重载.

规则

  • 函数名相同
  • 参数个数不同,参数类型不同,参数顺序不同.

注意

  • 返回值类型与函数重载无关
int fun() {}
float fun() {}

这两个函数不能构成函数重载.会报错.因为引起了 歧义,二义性.

int fun(int a) {}
float fun() {}

函数名相同,参数个数不同,这两个行数构成重载.与返回值无关.

void display(long a){}
void display(int a){}
void display(double a){}

dispaly(10)//void display(int a)
dispaly(10L)//void display(long a)
dispaly(10.0)//void display(double a)

此时以上三个函数构成重载.

void display(long a){}
void display(double a){}
dispaly(10)

此时报错,参数的隐式转换,导致 二义性,编译器不知道把int 10转换成long类型还是double类型.所以报错.

C++为什么可以支持函数重载

  • 采用了name mangling或者叫那么decoration技术
  • C++编译器默认会对符号名(比如函数名)进行改编,修饰,有些地方翻译为'命名倾轧'
  • 重载时回生成多个不同的函数名,不同编译器(MSVC,g++)有不同的规则.

默认参数

C++允许函数设置默认参数,在调用时可以根据情况省略实参.

规则如下:

  • 默认参数只能按照从右到左的顺序
  • 如果函数同时又声明,实现,默认参数只能放在函数声明中
  • 默认参数的值可以是常量,全局符号(全局变量,函数名)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容