c++函数的高级特性:重载,c++函数标识符,extern “C“的用处

c++函数的高级特性:重载

重载和内联可以可用于全局函数和类成员函数;

重载:将语义,功能相似,作用域相同的几个函数用同一个名字表示。
c++中类的构造函数需要重载机制。

重载的实现方法:
函数名称相同,参数不完全相同,参数可能在种类,数量,顺序上等有所不同,
在参数完全相同而返回值不同的情况下,编译器就不知道该调用哪个,所以这是一种二义性,而不是重载。

编译器根据参数为每个重载函数产生不同的内部标识符
例如:
void eat(beef bvalue)的标识符为_eat_beef或别的风格,依据编译器的不同可能会产生不同的函数标识符。

c++程序要调用已经被编译过的c函数时(就是静态库和动态库)
例如:c语言下的函数声明void foo(int x, int y);
该函数在c编译器编译后在库中的名字为_foo,而在c++编译器中则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,c++程序不能直接调用c函数。
c++提供了一个c连接交换符extern "C"来解决这个问题。
例如:

extern "C"
{
 void foo(int x, int y);
 //其他函数
}

extern "C"
{
 #include"mtheader.h" 
 //其他c头文件
}

通过extern "C"语句告诉编译器,函数foo是个c连接,应该到库中找名字_foo而不是_foo_int_int。
c++编译器开发商已经对c标准库的头文件做了extern "C"处理,所以我们才可以直接include这些头文件。

全局函数和类成员函数同名不算重载,因为作用域不同。

如果类的某个成员函数需要调用全局函数而同时拥有与全局函数重名的成员函数时,为了显示与成员函数的区别,需要在全局函数前加’::'标志。
::print(…);//表示print时全局函数而非成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值