函数重载的机制
在C中函数名是具有唯一性的,但是在C++中函数名可以相同。
C/C++编译器在实现函数名转换过程中的机制不同。
void get(int num)
{
}
在gcc下
在g++下
从上述比较中可以看出,C++函数名相同时,只要参数不同,底层就会解释为不同的函数名
在C++代码中使用C函数或者库时,需要添加"extern C"在头文件中,阻止编译器做相关转换。
extern "C"{
void get(int );
}
函数重载的表现类型
- 全局函数重载
- 成员函数重载
- 混合重载
类继承与重载函数覆盖
如果子类和父类中具有同名的函数,无论参数是否相同,子类都会直接覆盖。
class A{
public:
void go(int num)
{
cout<<"A::go(int)"<<endl;
}
void go(char *str)
{
cout<<"A::go(char*)"<<endl;
}
};
class B :public A
{
public:
void go(char *str)
{
cout<<"B::go(char*)"<<endl;
}
void go()
{
<span style="white-space:pre"> </span><pre name="code" class="cpp">cout<<"B::go()"<<endl;
}
};
int main(int agrc,char *agrv[])
{
A a;
a.go(nullptr);
B b;
b.go(nullptr);
b.go(NULL);//ERR,不存在相关函数
}
如果需要子类中调用父类中的函数,需要加域调用。