C++中的虚函数机制是为了实现多态性(Polymorphism)的一种机制。
在C++中,通过使用虚函数,可以在运行时确定调用的是哪个版本的函数,从而实现动态绑定。
以下是C++虚函数机制的基本原理和使用方式:
- 虚函数和虚表:在含有虚函数的类中,会生成一个虚函数表(Virtual Table,简称 vtable)。虚函数表是一个指针数组,其中存储了该类的虚函数的地址。每个对象的实例都包含一个指向虚函数表的指针,这个指针称为虚表指针(vptr)。
- 虚函数的声明和定义:在基类中,使用关键字 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