参考网页:https://www.cnblogs.com/charlesblc/p/6133605.html
重写重载区别
- 重载:指函数名相同,但是它的参数表列个数或顺序,类型不同,但是不能靠返回类型来判断,C++和java区别不大。
- C++中重写:是指派生类重新定义基类的虚函数。
- java中的重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
java重写与C++重写
java重写
- 重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。
- 重写方法不能使用比被重写的方法更严格的访问权限。
实例
class Person{
private int age;
private String name;
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String getInfo(){
return "Name is:"+name+",Age is "+age;
}
}
class Student extends Person{
private String school;
public void setSchool(String school){
this.school = school;
}
public String getSchool(){
return school;
}
public String getInfo(){
return "Name is:"+getName()+",Age is: "+getAge()+",School is:"+school;
}
}
public class TestOverRide{
public static void main (String args[]){
Student student = new Student();
Person person = new Person();
person.setAge(1000);
person.setName("lili");
student.setAge(23);
student.setName("vic");
student.setSchool("shnu");
System.out.println(person.getInfo());
System.out.println(student.getInfo());
}
}
输出:Name is:lili,Age is: 1000
Name is:vic,Age is 23,School is:shnu
C++重写
- 重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。
- 被重写的函数不能是static的,必须是virtual的
重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public、protect也是可以的。
#include<iostream> using namespace std; class Base { public: virtual void fun(int i){ cout << "Base::fun(int) : " << i << endl;} }; class Derived : public Base { public: virtual void fun(int i){ cout << "Derived::fun(int) : " << i << endl;} }; int main() { Base b; Base * pb = new Derived(); pb->fun(3);//Derived::fun(int) system("pause"); return 0; }