-
方法重载
【重载】:在一个类中用相同的名字创建多个方法(每个方法的参数表不同)。
【作用】:解决了同一个类中,相同的功能方法名不同的问题,既然是相同的功能,那么方法的名字就应该相同。
【方法重载原则】:
(两同一不同) 同类中,方法名相同,方法参数列表不同(参数类型、参数个数、参数顺序)
-
方法覆盖
【覆盖】:在一个类中创建的方法与父类中方法的名字、 返回类型和参数表相同。(
覆盖是针对两个类说的,而且必须是子类(或孙类,孙孙类等)覆盖掉父类的方法。)【作用】:解决子类继承父类之后,可能父类的某一个方法不满足子类的具体特征,此时需要重新在子类中定义该方法,并重写方法体。
【方法覆盖原则】:
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++ 的混合编程。