小工具知识网

当前位置: 首页 > 行业知识 > [C++] 多态(下) -- 多态原理 -- 动静态绑定

行业知识

[C++] 多态(下) -- 多态原理 -- 动静态绑定

2026-11-07 17:18:09 来源:互联网转载

文章目录

  • 1、多态原理
  • 2、动态绑定和静态绑定
  • 3、单继承和多继承关系的虚函数表
    • 3.1 单继承中的虚函数表
    • 5.2 多index.php/tags-41973.html" >���承中的虚函数表

      上一篇文章我们了解了虚函数表,虚函数表指针,本篇文章我们来了解多态的底层原理,更好的理解多态的机制。

      [C++] 多态(上) – 抽象类、虚函数、虚函数表

      1、多态原理

      下面这段代码中,Func函数传Person调用的Person::BuyTicket,传Student调用的是Student::BuyTicket,这就是多态调用,但是这里我们并不知道原理是什么,接下来我们就来了解一下原理。

      class Person {public:virtual void BuyTicket() { cout public:virtual void BuyTicket() { cout p-BuyTicket();}int main(){Person p;Func(&p);Student s;Func(&s);return 0;}public:virtual void func1(){cout cout public:virtual void func1() { cout  cout  cout Base b;Derive d;return 0;}// 依次取虚表中的虚函数指针打印并调用。调用就可以看出存的是哪个函数cout printf(" 第%d个虚函数地址 :0X%x,-", i, vTable[i]);VFPTR f = vTable[i];f();}cout Base b;Derive d;VFPTR* vTableb = (VFPTR*)(*(int*)&b);PrintVTable(vTableb);VFPTR* vTabled = (VFPTR*)(*(int*)&d);PrintVTable(vTabled);return 0;}public:virtual void func1() { cout  cout public:virtual void func1() { cout cout public:virtual void func1() { cout  cout cout printf(" 第%d个虚函数地址 :0X%x,-", i, vTable[i]);VFPTR f = vTable[i];f();}cout Derive d;VFPTR* vTableb1 = (VFPTR*)(*(int*)&d);PrintVTable(vTableb1);VFPTR* vTableb2 = (VFPTR*)(*(int*)((char*)&d + sizeof(Base1)));PrintVTable(vTableb2);return 0;}

上一篇:CFAR下载攻略,一键获取游戏安装包!

下一篇:宝塔面板进程监控详解,轻松管理你的应用进程!