分二部分:函数重载,操做符重载。c++
函数重载:指在同一名字空间中,函数名称相同,参数类型、顺序或数量不一样的一类函数,同一函数名的函数能完成不一样功能。函数
//非函数重载,只是返回值不同 void Fun(int i); int Fun(int i); //非函数重载,不在同一名字空间 namespace A { int Add(int i, int j); }; namespace B { float Add(float i, float j); }; //函数重载 int Add(int i, int j); float Add(float i, float j);
重命名机制:函数重载的名称都是如出一辙的,C++编译器就是经过重命名机制来区别这些同名函数的(不一样的C++编译器,重命名机制可能不同)。spa
//重命名机制 void Fun(int i, double j); //c++编译器把函数名Fun其实重命名为_Fun_int_double void Fun(double i, int j); //c++编译器把函数名Fun其实重命名为_Fun_double_int
C++调用C 函数:C++提供了一个C 链接交换指定符号extern“C”来解决这个问题。code
void Fun(int i, ini j); C 编译器编译后的名字为_Fun。blog
void Fun(int i, int j); C++编译器编译后的名字为_Fun_int_int。编译器
C 编译器和C++编译器产生的名字不一样,因此C++不能直接调用C 函数。用extern“C”解决。it
extern "C" { //头文件 #include “header.h” //函数 void Fun(int i, int j); }
操做符重载:指用关键字operator加运算符表示的函数。能够把其理解为特殊形式的函数,运算符自己是函数名。编译
int Add(int i, int j); //普通函数 int operator+(int i, int j); //+运算符函数 //用法 int k = Add(10, 20); int m = 10 + 20;
操做符重载规则:class
ps:后面讲到类时再结合例子讲解下操做符重载为成员函数。基础