[c++]继承覆盖与函数重载

本文详细解析了C++中函数重载的机制,包括C与C++的差异,以及如何在C++代码中正确使用C函数或库,并讨论了全局函数重载、成员函数重载、混合重载和类继承中的函数覆盖。文章还提供了实例代码来展示这些概念的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数重载的机制

在C中函数名是具有唯一性的,但是在C++中函数名可以相同。

C/C++编译器在实现函数名转换过程中的机制不同。

void get(int num)

{

}

在gcc下

在g++下

从上述比较中可以看出,C++函数名相同时,只要参数不同,底层就会解释为不同的函数名

在C++代码中使用C函数或者库时,需要添加"extern C"在头文件中,阻止编译器做相关转换。

extern "C"{

void get(int );

}

函数重载的表现类型

  1. 全局函数重载
  2. 成员函数重载
  3. 混合重载
类继承与重载函数覆盖
如果子类和父类中具有同名的函数,无论参数是否相同,子类都会直接覆盖。
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,不存在相关函数
}

如果需要子类中调用父类中的函数,需要加域调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值