虚继承和虚函数的实质
来源:互联网 发布:淘宝网苏绣屏风 编辑:程序博客网 时间:2024/05/16 04:36
虚函数的实质是一个指针,指向虚函数表,这个表的位置我现在还不太清楚,不过这样做的好处是实现了动态确定一个函数
因为指针指向的位置可以变化,这样就可以实现override覆盖。子类覆盖父类方法的实质就是填写这个指针指向什么位置的过程
同样虚继承的实质也是一样,实际就是一个指针,就好像C++中声名一个对象,可以
A a;
也可以
A* a = new A();
第二种就是声明一个指针,指向一个堆中的对象。第一种就不是指针的形式
所以第二种形式就有动态性,是多态的基础
假设A的子类是ASon,使用语句
A* aa = new ASon();
就是把一个A类型的指针指向了ASon对象,调用的方法自然也就是ASon的了
经过以上分析就可以知道示例程序中A类中有一个int i占4字节,另外f()是一个指针,所以是4字节,所以sizeof(A)=8
这里需要引申一下的是多个虚函数只维护一个指向虚函数表的指针,也就是说如果A中还有这样几个函数
virtual void f1();
virtual void f2();
virtual void f3();
virtual void f4();
virtual void f5(); 那么sizeof(A)还是8 类中所有的函数是不占空间的。如果在A中声明void F(); sizeof(A)没有变化 B是虚拟继承A所以比A多一个指针,也就是说sizeof(B)=12 C是一般的继承,与A大小一样,也是8
- 虚继承和虚函数的实质
- 虚函数表的实质。
- 内联函数的实质
- 继承和虚函数
- 关于继承和虚函数的问题
- 类的继承和虚函数
- 虚函数继承和虚继承
- 虚继承和虚函数继承
- 虚继承和虚函数继承
- 虚继承和虚函数继承
- 继承----有关虚函数和虚拟继承
- 解析.net中继承的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- 虚函数的继承
- 开心一刻
- Dalvik 简介
- url
- kinect开发的openni使用
- 用C++实现单词分割
- 虚继承和虚函数的实质
- 如何用typedef定义windows回调函数的别名
- WINDOWS SERVER 2008/2008 R2 最大内存支持
- 2.6内核中被废弃的pci_present()
- SRM 504
- Delete the .svn directory recursively
- Assembly study
- 【转载】在职一座山,离职一座碑
- Socket服务器整体架构概述