C++多态的实现机制深入理解

2020-01-06 15:33:57丽君

在声明基类对象时,虚函数表中绑定的就是基类的方法的地址。在声明派生类对象时,虚函数表中绑定的就是派生类的方法。在对象被创建之后(以指针为例),无论是基类指针还是派生类指针指向这个对象,虚函数表是不会改变的。
以下段程序为例:


#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun()
{
cout << "this is base fun" << endl;
}
};
class Derived : public Base
{
public:
void fun()
{
cout << "this is Derived fun" << endl;
}
};
int main(int argc, char *argv[])
{
Base b1;
Derived d1;
Base *pb = &d1;
Derived *pd = (Derived *)&b1;
b1.fun();
pd->fun();
d1.fun();
pb->fun();
return 0;
}

运行结果如下:

c多态的实现机制

从结果可以看出,当一个对象被创建之后,在调用虚函数的时候,无论是派生类指针还是基类指针指向这个对象,调用虚函数的结果是一样的。因为,虚函数表是不变。当然,有可能在多继承中会有多个虚函数表从而导致函数调用时调用不同的虚函数表,这里不做考虑。

以上所述是小编给大家介绍的C++多态的实现机制理解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ASPKU网站的支持!


注:相关教程知识阅读请移步到C++教程频道。