《基础知识——方法重载和方法覆盖》

  • 方法重载

【重载】:在一个类中用相同的名字创建多个方法(每个方法的参数表不同)。

【作用】:解决了同一个类中,相同的功能方法名不同的问题,既然是相同的功能,那么方法的名字就应该相同。

【方法重载原则】:

(两同一不同) 同类中,方法名相同,方法参数列表不同(参数类型、参数个数、参数顺序)

  • 方法覆盖

【覆盖】:在一个类中创建的方法与父类中方法的名字、 返回类型和参数表相同。(覆盖是针对两个类说的,而且必须是子类(或孙类,孙孙类等)覆盖掉父类的方法。

【作用】:解决子类继承父类之后,可能父类的某一个方法不满足子类的具体特征,此时需要重新在子类中定义该方法,并重写方法体。

【方法覆盖原则】:

1)覆盖方法必须和父类中被覆盖方法具有相同的方法名称、输入参数和返回值类型。 

2)覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。 

3)覆盖方法不能比父类中被覆盖方法抛出更多的异常。

  • 【补充】(extern“C”):

C++调用C函数需要extern C,因为C语言没有函数重载。

C++有函数重载,而C语言是没有函数重载的。函数重载是指两个或多个函数之间函数名相同,参数列表不同,参数列表不同可以是参数的个数不同,或者是参数的个数相同但参数类型不同,需要注意的是如果函数名相同,参数列表完全相同但返回值类型不同是不能构成函数重载的。C++有函数重载是因为当生成obj中间文件/目标文件的时候,C++编译器把原函数名与参数信息结合,产生了一个独特的内部名字,比如有两个函数 void foo(int x) 和 void foo(void) ,最终产生的内部名字就是 _foo_int 和 _foo_void (实际产生的内部名字的命名规则应该不是这样的,这里我们并不关心它的命名规则是怎样的,只需要体会这个意思就可以了),通过这样编译器就能区分 void foo(int x) 和 void foo(void)这两个函数了。但是在C语言里面,并不会产生这样的内部名字,如果C语言里面有两个函数 void foo(int x) 和void foo(void),那么当生成obj中间文件/目标文件的时候,产生的名字就是 _foo 和 _foo 这样两个名字相同,C编译器就不能将两个函数区分开了,所以C语言里面也就没了函数重载。

正是由于C++编译器 和 C编译器对函数名处理方式的不同,当我们的 C++ 程序调用 C 程序或者 C 程序调用 C++程序时就会存在问题。 有了问题那当然就得解决,于是就有了 extern "C" 的出现。

所以说到底 extern "C" 的作用是用来解决名字匹配问题,实现 C 与 C++ 的混合编程。

原文链接】、【extern 详解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值