前两天通过父类指针调用子类虚函数时调用了一个父类未定义的方法,顺便找了下关于虚函数的资料。特此转存耗子哥的这篇博文。地址在这里以及关于C++对象内存布局的进阶篇上篇下篇
分类:
编程语言 时间:
2014-09-02 19:32:25
阅读次数:
174
虚函数表在继承层次中比较复杂,总结重要的几点如下:
1、虚函数指针一般在对象的开头或者结尾
2、虚函数表其实就是一个函数指针类型的数组
3、编译器如何知道虚函数表指针?答案是虚函数表的最后一个元素是NULL
4、当从多个基类派生时,派生类继承所有基类的虚函数指针
5、虚函数表是类级别的,类的所有对象共享同一个虚函数表
6、不同的类的对象有不同的虚函数表
7、在继承中,子类增加一个虚函...
分类:
编程语言 时间:
2014-08-30 21:48:50
阅读次数:
230
C++虚函数表解析陈皓http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了...
分类:
编程语言 时间:
2014-08-26 19:22:46
阅读次数:
251
1、 单个虚拟继承
只是为了分析而已,实际中并没有太大的作用。跟虚拟继承相关的派生类对象的内存布局跟具体的编译器相关。
(1)VS编译器:无论有无虚函数,必然含有虚基类表指针。虚基类表中的内容为本类实例的偏移和基类实例的相对偏移值。如果有虚函数,那么基类的虚函数表跟派生类的虚函数表是分开的。
在内存布局上,地址从低到高,顺序如下:派生类的虚函数表指针+虚基类表指针+派生类的成员变量+“...
分类:
编程语言 时间:
2014-08-23 11:24:30
阅读次数:
357
http://blog.csdn.net/haoel/article/details/1948051/前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛...
分类:
编程语言 时间:
2014-08-20 19:23:12
阅读次数:
311
1、当在一个子类当中调用构造函数,其父类构造函数肯定先被调用。如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数。即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virt...
分类:
编程语言 时间:
2014-08-16 10:59:50
阅读次数:
248
这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006) 敬告:本文是介绍C++的技术文章,假定读者对于C...
分类:
其他好文 时间:
2014-08-13 18:12:16
阅读次数:
234
1、虚函数表http://blog.csdn.net/haoel/article/details/19480512、内存管理http://blog.csdn.net/haoel/article/details/3081328/http://blog.csdn.net/zhanghefu/articl...
分类:
其他好文 时间:
2014-08-09 15:37:28
阅读次数:
190
一、构造函数为什么不能为虚函数
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。
2. 从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函...
分类:
其他好文 时间:
2014-08-09 11:46:37
阅读次数:
278
代码:
#include
using namespace std;
/*
class a{
float k; // 4字节
virtual void foo(){} //有一个4字节的指针指向自己的虚函数表
};
class b : virtual public a{
virtual void f(){}
}; 有这样的一个指针vptr_b_a,这个指针叫虚类指针,也是四个字节...
分类:
其他好文 时间:
2014-08-07 23:23:25
阅读次数:
465