C++

  • 1 概述

    为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。

    2 类的虚表

    每个包含了虚函数的类都包含一个虚表。
    我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包含虚函数的基类,那么这个类也拥有自己的虚表。
    我们来看以下的代码。类A包含虚函数vfunc1,vfunc2,由于类A包含虚函数,故类A拥有一个虚表。

    class A {
    public:
        virtual void vfunc1();
    

  • 1 访问控制

    都有public,protected,private三级访问控制
    此外,java还有包访问控制,c++有友元。

    2 继承

    C++有public继承、protected继承、private继承,Java只有public继承。
    C++支持多重继承,它允许一个类继承多个父类。Java不支持多重继承,但允许一个类继承多个接口。
    C++方法默认是非虚的,可用virtual关键字指定为虚函数。Java方法默认是虚的,可用final关键字禁止override。

    3 构造和析构

    对象构造大致相同,但是c++在构造函数中调用虚函数无法多态(因为对象的子类部分还没构造)
    c++可以定义析构函数,ja