[初学C++]C++的拓展--函数重载

2018-12-06  本文已影响8人  Mr_Doer

重载规则**

1)函数名相同。
2)参数个数不同,参数的类型不同,参数顺序不同,均可构成重载。
3)仅仅返回值类型不同则不可以构成重载

调用准则

1)严格匹配,找到则调用。
2)通过隐式转换寻求一个匹配,找到则调用。
print(1); // print(int)
print(1.1); // print(double)
print('a'); // print(int)
print(1.11f); // print(double)
编译器调用重载函数的准则
1.将所有同名函数作为候选者
2.尝试寻找可行的候选函数
3.精确匹配实参
4.通过默认参数能够匹配实参
5.通过默认类型转换匹配实参
6.匹配失败
7.最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
8.无法匹配所有候选者,函数未定义,编译失败。

重载底层实现

C++利用 name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。
实现原理:用 v c i f l d 表示 void char int float long double 及其引用。
void func(char a); // func_c(char a)
void func(char a, int b, double c); //func_cid(char a, int b, double c)
一个函数,不能既作重载,又作默认参数的函数。当你少写一个参数时,系统
无法确认是重载还是默认参数。

函数重载和函数指针结合

函数重载与函数指针
当使⽤用重载函数名对函数指针进⾏行赋值时
根据重载规则挑选与函数指针参数列表⼀一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型

函数指针基本语法
//方法⼀:
//声明一个函数类型
`typedef void (myTypeFunc)(int a,int b);
//定义一个函数指针
myTypeFunc myfuncp = NULL; //定义一个函数指针 这个指针指向函数的⼊口地址
//方法二:
//声明一个函数指针类型
typedef void (
myPTypeFunc)(int a,int b) ; //声明了一个指针的数据类型
//定义一个函数指针
myPTypeFunc fp = NULL; //通过函数指针类型 定义了一个函数指针
//方法三:
//定义一个函数指针变量
void (*myVarPFunc)(int a, int b);

函数重载总结

重载函数在本质上是相互独立的不同函数。
函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。

上一篇 下一篇

猜你喜欢

热点阅读