函数重载的机制
在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,不存在相关函数
}如果需要子类中调用父类中的函数,需要加域调用。
本文详细解析了C++中函数重载的机制,包括C与C++的差异,以及如何在C++代码中正确使用C函数或库,并讨论了全局函数重载、成员函数重载、混合重载和类继承中的函数覆盖。文章还提供了实例代码来展示这些概念的应用。
1万+

被折叠的 条评论
为什么被折叠?



