C++浅析函数重载是什么
作者:智者不如爱河
前言
这是一个非常重要的点
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数。
这些同名函数的 形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
或者说,给一个名字赋予第二层意义,一词多义,有点内涵那意思
函数重载
首先C语言不允许定义同名的函数,但是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,double,long。
而且个数不同也能构成函数重载。
下面来打印玩一下(刚开始玩打印很正常,但是工作中很少用)
int main(void) { cout << ADD(1,2) << endl; cout << ADD(1.2, 2.2) << endl; cout << ADD(40l, 40l) << endl; return 0; }
结果:
感觉是调用的是一个函数,但其实不止一个,因为这个函数被重载了,所以有三层定义。
实际上调用的是
1:int类型的
2:double类型的
3:long类型的。
一些其他问题
缺省算不算重载 ?
//NO.1 int ADD(int left, int right) { return left + right; } //NO.2 int ADD(int left = 1, int right = 2) { return left + right; }
注意 : NO.1和NO.2两个不算重载,因为构成重载的条件是参数的类型不同或者个数不同,以上均不满足 。重载只看类型
但是
//NO.2 int ADD(int left = 1, int right = 2) { return left + right; } //NO.3 double ADD(double left, double right) { return left + right; }
NO.2和NO.3是构成重载的,因为满足了重载的条件
函数重载的要求:函数名相同,参数不同(参数类型不同,参数个数不同)
综上所述,缺省和重载没有关系!
2.1 int和char怎么区分
int ADD(int left = 10, int right = 20) { return left + right; } char ADD(char left, char right) { return left + right; } int main() { cout << ADD() << endl; //cout << ADD(1,2) << endl; //(1,2)字面量常量, //默认给十进制,十六进制等等,给的整形默认算常量 //如果调用char cout << ADD('1', '2') << endl; //char类型打印,自动按%c,字符类型→ → → → → ↓ //传字符才调用char类型的 ↓ // ↓ //char类型的字符只是显示表面,深入剖析的话在内存中,它存储在4byte中,是它对应的ASCII码值 ↓ //ASCII码值还是整形,只不过是1byte ↓ //char类型存的值是‘49',‘50'. ← ← ← ← ← ← ← ← ← ← ← ← ← ← //对应的是c。c在ASCII码值中是99 ← ← ← ← ← ← ← ← ← ← ← ← ← ← return 0; }
总结:
1.char和int都是表示整形的,整形一般都是用来表示大小,只不过int是4byte,char是1byte
2.char的1byte是用来表示ASCII码值的字母,多个字母可以表示英文,就能表示文字了
2.2 传值
有三个值,但是缺省了一个,传的时候只传了两个
void lost(int a, int b, int c = 1) { } void lost(int a, int b) { } //以上构成函数重载,函数名相同,参数或者个数不同 int main() { lost(1, 2, 3); lost(1,2); //↑是编不过去的, return 0; }
总结:
1. 有多个重载函数“lost”实例与参数列表匹配
2. 编译器不能识别要调用哪一个“lost”对重载函数的调用不明确
3. 构成重载但是调用的时候埋了一个坑
到此这篇关于C++浅析函数重载是什么的文章就介绍到这了,更多相关C++函数重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!