java和C++之动态绑定对比

#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++虚函数有实现可以调用。相同点都是以动态绑定为基础。

原文地址:https://www.cnblogs.com/yujinghui/p/2853931.html