page contents

简述多态实现的原理?

轩辕小不懂 发布于 2021-07-27 14:45
阅读 894
收藏 0
分类:C/C++开发
  • c
  • c++
  • 1434
    Nen
    Nen
    - 程序员

    编译器发现一个类中有虚函数,便会立即为此类生成虚函数表 vtable。虚函数表的各表项为指向对应虚函数的指针。编译器还会在此类中隐含插入一个指针 vptr(对 vc 编译器来说,它插在类的第一个位置上)指向虚函数表。调用此类的构造函数时,在类的构造函数中,编译器会隐含执行 vptr 与 vtable 的关联代码,将 vptr 指向对应的 vtable,将类与此类的 vtable 联系了起来。另外在调用类的构造函数时,

    指向基础类的指针此时已经变成指向具体的类的 this指针,这样依靠此 this 指针即可得到正确的 vtable。如此才能真正与函数体进行连接,这就是动态联编,实现多态的基本原理。

    注意:一定要区分虚函数,纯虚函数、虚拟继承的关系和区别。牢记虚函数实现原理,因为多态是C++面试的重要考点之一,而虚函数是实现多态的基础。

    请先 登录 后评论