-
重载:根据语义来确定相应的功能
1、函数重载
函数重载:c++简化编程, 通过函数重名来达到简化编程的目的
1)函数重载条件:
函数名相同,参数列表、类型、个数、顺序不同。返回值类型, 不作为重载的标准。
2)匹配规则
C++ 允许, int到long和double,double到int和float,int到short 和 char 等隐式类型转换。 遇到这种情型, 则会引起二义性。添加转换OK; ex: float a; print(int a)
(1) 严格匹配, 找到则调求一个匹配, 找到则用。
(2)通过隐式转换寻调用。
3)重载原理
C++利用 Name Mangling(命名倾轧)技术,来改变函数名,区分参数不同的同名函数。
底层实现原理: 用 v-c- i-f- l- d 表示 void char int float long double及其引用。
比如多个 func_i (int a) func_f_i (float a, int b) --> 底层会进行命名倾轧,改变函数名。
4)反倾轧
反倾轧 C++完全兼容C (语法+标准C库,不会参加倾轧)
C++ 默认所有函数倾轧。若有特殊函数不参与倾轧,则需要使用 extercn "C" 来进行声明。在{ } 括号内实现C的不倾轧
Extern “C”
{
Void func (int a);
Void func (char b); à 反倾轧 和C语言一样 发生冲突
}
包含头文件时,要么都倾轧,要么都不倾轧。
2、操作符重载
前面用到的<<本身在 C 语言中是位操作中的左移运算符。 现在又用作流插入运算符, 这种一个运算符多种用处的现像叫作重载。
在 C 语言中本身就用重载的现像, 比如 & 既表示引用操作符、取地址, 又表示位操作中的与。
*既表示解引用, 又表示乘法运算符。 只不过 c 语言并没有开放重载机制。
C++提供了运算符重载机制。 可以为自定义数据类型重载运算符。 实现构造数据类型也可以像基本数据类型一样的运算特性。