#include<stdio.h>
class Father{
public :
virtual void print(){
printf("virtualFahter");
}
void print1(){
printf("Fahter1");
}
};
class Child : public Father{
public :
void print(){
printf("virtualChild");
}
void print1(){
printf("Child1");
}
};
main(){
Child * child = new Child();
//Father * child = new Child();
child->print();
child->print1();
}
该程序执行的结果为virtualChildChild1而把主函数中第二行注释去掉后第一行加上注释以后结果为virtualChildFahter1。
结论显而易见,C++中只有virtual的函数才能动态绑定。
class Deo{
public int i = 0;
public void prin(){
System.out.println("Fahter") ;
}
}
public class DeoChild extends Deo{
public int i = 1;
public void prin(){
System.out.println(“CHild”);
}
public static void main(String[] args){
Deo deo = new DeoChild();
deo.prin();
}
}
结果为CHild,故java中的重写就是动态联编之一。
java的抽象方法和C++中虚函数关系:
java的抽象方法没有具体的实现不能被调用,而C++虚函数有实现可以调用。相同点都是以动态绑定为基础。