摘要:
可以在运行时确定 virtual 函数的调用 将基类类型的引用或指针绑定到派生类对象对基类对象没有影响,对象本身不会改变,仍为派生类对象。对象的实际类型可能不同于该对象引用或指针的静态类型,这是 C++ 中动态绑定的关键。 在编译时确定非 virtual 调用 非虚函数总是在编译时根据调用该函数的对象、引用或指针的类型而确定。 覆盖虚函数机制 使用作用域操作符。 为什么会希望覆盖虚函数机制?最常见的理由是为了派生类虚函数调用基类中的版本。 在这种情况下, 基类版本可以完成继承层次中所有类型的公共任务,而每个派生类型只添加自己的特殊工作。 虚函数与默认实参 在同一虚函数的基类版... 阅读全文
摘要:
c++中虚函数的主要作用是实现多态。多态指同一个方法根据其所属的不同对象可以有不同的行为。 引用和指针的静态类型与动态类型可以不同, 这是 C++ 用以支持多态性的基石。 实现多态需要动态绑定的支持。C++ 中的函数调用默认不使用动态绑定。要触发动态绑定,满足两个条件: 1、只有指定为虚函数的成员函数才能进行动态绑定 2、必须通过基类类型的引用或指针进行函数调用 而动态绑定是如何实现的呢,必须提到虚函数表。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以... 阅读全文