虚函数表指针和虚继承
来源:互联网 发布:mac新建智能文件夹 编辑:程序博客网 时间:2024/06/07 11:14
当一个类中存在虚函数,则在该类实例化后,在类的开始处存放一个指针,虚函数表指针,指向虚函数地址的指针。大小为4字节。而不是在类开始处存放多个虚函数的地址。下面是实验的例子:
#include <iostream>
using namespace std;
class A{
public:
virtual void f() {cout<<"f,A"<<endl;};
virtual void d(){};
private:
int x;
int y;
};
class B{
public:
virtual void f() {cout<<"f,B"<<endl;};
private:
int x;
int y;
};
class C:public A{
};
class device: public A,B{
public:
virtual void f() {cout<<"f,device"<<endl;};
virtual void g() {cout<<"g,device"<<endl;};
virtual void ffg() {cout<<"g,device"<<endl;};
};
int main()
{
cout<<sizeof(int)<<endl;
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(device)<<endl;
return 0;
}
结果:
4
12
12
12
24
A:x,y,虚函数指针,12字节。同理B、C
device:拥有A的虚函数表指针、x、y(12字节)和B的虚函数表指针、x、y(12字节),所以在栈中占用内存是24字节
以上即是多态的实现。
还有一种钻石型多重继承(也是一种虚继承),继承形式如下:
A
/ \
B C
\ /
D
实现:
class A{}
class B:public virtual A{}
class C:public virtual A{}
class D:pulic B,C{}
- 虚函数表指针和虚继承
- 单继承与多继承中的虚函数表和虚函数指针
- 继承和虚函数
- 多重继承、虚函数、this指针偏移
- 虚函数继承和虚继承
- 虚继承和虚函数继承
- 虚继承和虚函数继承
- 虚继承和虚函数继承
- 【虚函数、虚拟指针、虚表指针】解析多重继承时,虚表的分布
- 继承----有关虚函数和虚拟继承
- 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取
- 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取(二)
- 解析虚函数表和虚继承
- 虚继承和虚函数
- 虚函数和虚继承
- 继承和纯虚函数
- 多重继承和虚函数
- 菱形继承和虚函数
- 通达OA二次开发-随时获取工作流中的数据
- Intel Network Drivers for SunSoft Solaris*
- C++中的const(一)——和C中的区别
- 三角肌前束(04):杠铃立正划船
- 知识总结-Java 操作 Excel (读取Excel2003 2007,Poi实现)
- 虚函数表指针和虚继承
- 可靠的UDP编程(ENET库)
- didReceiveMemoryWarning到底应该怎么用
- 面试失败也不一定说明就是你的错
- qgis学习资料
- 关于数据库表索引的作用以及意义
- 大学里成功的男生是这样的
- 庖解Chrome源码(1)——线程模型 Smart Pointers
- C++连接数据库分布进行