C++虚函数机制的基本原理和使用方式

C++中的虚函数机制是为了实现多态性(Polymorphism)的一种机制。

在C++中,通过使用虚函数,可以在运行时确定调用的是哪个版本的函数,从而实现动态绑定。

图片[1]-C++虚函数机制的基本原理和使用方式-不念博客

以下是C++虚函数机制的基本原理和使用方式:

  1. 虚函数和虚表:在含有虚函数的类中,会生成一个虚函数表(Virtual Table,简称 vtable)。虚函数表是一个指针数组,其中存储了该类的虚函数的地址。每个对象的实例都包含一个指向虚函数表的指针,这个指针称为虚表指针(vptr)。
  2. 虚函数的声明和定义:在基类中,使用关键字 virtual 声明虚函数。派生类可以选择覆盖(override)基类的虚函数。虚函数的实现会放在虚函数表中,而不是直接在类定义中。
class Base {
public:
    virtual void print() const {
        std::cout << "Base class" << std::endl;
    }
};

class Derived : public Base {
public:
    void print() const override {
        std::cout << "Derived class" << std::endl;
    }
};

动态绑定

0当通过基类指针或引用调用虚函数时,实际调用的是对象的动态类型所对应的虚函数。

这种在运行时决定调用哪个函数的机制称为动态绑定。

在下面的例子中,通过 print 函数调用时,根据对象的实际类型来调用相应的虚函数。

void printInfo(const Base& obj) {
    obj.print(); // 动态绑定,根据实际类型调用相应的虚函数
}

int main() {
    Base baseObj;
    Derived derivedObj;

    printInfo(baseObj);    // 调用 Base 类的虚函数
    printInfo(derivedObj); // 调用 Derived 类的虚函数

    return 0;
}

通过虚函数,可以实现在基类指针或引用的情况下,根据实际对象的类型来调用相应的函数,实现了多态性。

© 版权声明
THE END