博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++虚函数在内存中的实现
阅读量:6428 次
发布时间:2019-06-23

本文共 748 字,大约阅读时间需要 2 分钟。

首先来一张图,一目了然:

然后把相应的代码贴上来:

1 class A 2 { 3     int a; 4  5 public: 6     virtual void f(); 7     virtual void g(int); 8     virtual void h(double); 9 };10 11 class B : public A12 {13 public:14     int b;15 16     void g(int);    //overrides A::g()17     virtual void m(B*);18 };19 20 class C : public B21 {22 public:23     int c;24 25     void h(double);    //overrides A::h()26     virtual void n(C*);27 };

 后记:(1)每个类的一开始都是一个虚函数指针,这个指针指向一个虚函数表,表中的每一项都是相应的虚函数的指针。

         (2)类在继承的时候,一个子类的开始就是基类的部分,了解继承后子类的模型。

         (3)vfptr这个指针有范围的,比如A类的vfptr只能看三个记录,B的vfptr能看四个记录,C的vfpr能看五个记录。这就是多态的时候,父类的指针                 指向子类对象的时候,它看不到子类的数据成员和成员函数(包括子类中的虚函数)。

         (4)一般的面向对象的语言多态基本都是这个原理,前面写了一篇博文,当时说的是基类和派生类的vfptr分开了,其实他们是在一起的,前面之所                 以分开说,是为了叙说方便。

转载于:https://www.cnblogs.com/stemon/p/3407191.html

你可能感兴趣的文章
设计模式笔记感悟 - Creational篇
查看>>
C++函数指针
查看>>
iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置)
查看>>
java中对MySql的配置
查看>>
EBS_DBA_查询:锁相关
查看>>
LINUX系统中高级网络服务:Bond、Team和网桥
查看>>
JAM计数法
查看>>
stm32 时钟配置——外部时钟倍频、内部时钟倍频
查看>>
Micropython教程之TPYBoard DIY电子时钟(萝卜学科编程教育)
查看>>
ASP.NET初学笔记:FileUpload控件
查看>>
HDU3486 RMQ
查看>>
dedecms采集过滤规则 及替换规则
查看>>
项目管理过程 (1)
查看>>
c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
查看>>
比特币不是虚拟货币,这是一个真实世界----李笑来
查看>>
翻译研讨20091212时事报道:目的是达成气候变化协议 Aiming for a Deal on Climate Change...
查看>>
2009年云数据库的开发和应用前景(转载)
查看>>
监听polygon变化
查看>>
rsync安装配置实时同步
查看>>
Django的views使用
查看>>