C++多态的原理
来源:互联网 发布:开票产品利润算法 编辑:程序博客网 时间:2024/06/10 17:28
多态的原理
例1:定义一个Shape类,其中有一个虚函数和数据成员,然后定义一个Circle类,只有构造函数和数据成员,并且公有的继承Shape类,所以Circle类使用的也是Shape类的虚函数来计算面积,此时的虚函数如何来实现呢?
当我们实例化一个Shape对象的时候,这个Shape对象中除了有数据成员,还有虚函数表指针,虚函数表指针是指向虚函数表的,父类的虚函数表只有一个,通过父类实例化的所有对象的虚函数表指针都和父类的值一样,以确保他们都是指向自己的虚函数表。虚函数表中都定义了虚函数的函数指针,指向虚函数。调用过程:虚函数表指针-->虚函数表-->函数指针-->函数
当我们实例化一个Circle对象的时候,由于它继承了Shape的虚函数,所以也会产生一个自己的虚函数表
如果我们在Circle中定义了相同的calcArea()函数,Shape中的情况不会变,Circle的虚函数表中的calcArea()函数的函数指针(calcArea——ptr)会变成自己定义的函数地址
调用过程:虚函数表指针-->虚函数表-->函数指针-->函数
因此,如果我们用Shape的指针指向Circle的对象,他就会找到Circle的虚函数表指针,从而找到Circle的虚函数表,在找到Circle的函数进行执行。这就是多态的原理。
阅读全文
0 0
- 【C++】多态的实现原理
- C 语言实现多态的原理:函数指针
- C++ 多态的实现原理--虚函数表
- c的多参设计原理
- C的编译原理
- RTTI实现原理(多态的原理)
- object-c通知的原理
- Objective-C的runtime原理
- c/c++的编译原理
- Pagerank的C实现原理
- Pagerank的C实现原理
- C++/C中命令行参数的原理
- 【C/C++】 高效C++委托的原理
- 多接口原理-object-c
- C++(多态实现原理)函数重写,重载,重定义
- Objective-C的Block的实现原理
- 多态的实现原理
- 多态实现的原理
- DBA--创建索引
- 增加切片层级
- 继承,多态
- HDU
- 内部类
- C++多态的原理
- 使用clipboard.js复制示例
- Andrew Ng 深度学习课程Deeplearning.ai 编程作业——forward and backward propagation(1-4.1)
- 谈判技巧
- JQuery动态生成Table表格
- Open-Source iOS Apps
- 时间工具类
- c++对文件进行操作之遍历双层文件结构
- js动态添加子节点