Java与C++区别:重载(Overloading)
Java中一个类的函数重载可以在本类中的函数和来自父类中的函数之间进行,而C++类中的函数重载只能是本类中的(即不包括来自父类的函数),这是他们一个非常重要的区别。在其他方面的要求都是一致的,即要求函数名称一致,参数不同。只有返回值类型不同的函数,不能构成重载(会有编译错误,提示函数定义重复)。
1. Java的函数重载范围是整个继承体系中的可见函数
public class OverrideAndOverload { public static void main(final String[] args) { // TODO Auto-generated method stub OverClassB obj = new OverClassB(); obj.say("hi"); obj.say(123); } } class OverClassA { public void say(final String words) { System.out.println("A: " + words); } } class OverClassB extends OverClassA { public void say(final int n) { System.out.println("B: " + n); } }
2.而C++中的类中的函数重载的范围只能是本来中的函数,如果本类中的函数与父类的函数名称重合那么就会隐藏父类相应的函数(不会产生重载的效果)。如果继续使用父类的函数则编译无法通过:
#include <iostream> #include <cstdlib> using namespace std; class A { public: void say(const char* words) { cout<<"A: "<<words<<endl; } }; class B { public: void say(int n) { cout<<"B: "<<n<<endl; } }; int main() { B b; b.say("haha");//此行产生编译错误 system("pause"); return 0; }