指向 data member 的指针是一个颇有用处的语言特性, 特别是如果你需要详细调查 class members 的底层布局的话。这个调查可以帮助你决定 vptr 是放在尾端还是起始处。 另一个用途是可以用来决定 clas 中 access sections 的次序。考察以下代码, 其中有一个 ...
分类:
其他好文 时间:
2014-11-22 14:41:42
阅读次数:
192
/*对于此类的模型为:class object{ float _x;//类的nonstatic成员函数 _vptr_Point;//指向虚函数表的指针}virtual table//虚函数表的信息(应该存放的是一些指针)slot1---type info for Point(用于支持RT...
分类:
其他好文 时间:
2014-10-06 11:23:10
阅读次数:
263
通用算法//CRC-8 x8+x2+x+1inline unsigned char cal_crc(unsigned char *vptr, unsigned char len){const unsigned char *data = vptr;unsigned crc = 0;int i, j;f...
分类:
其他好文 时间:
2014-09-30 10:47:42
阅读次数:
305
虚函数virtual表示动态继承,通过vptr指针指向vtable虚表,虚表中保存了每个虚函数的地址。通过父类指针在运行时绑定子类方法。虚继承:有几个父类,就有几个vtab和vptr定义一个函数为纯虚函数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规范继承这个。类的程序员必...
分类:
编程语言 时间:
2014-09-18 22:10:44
阅读次数:
237
#include using namespace std;class X { int x, y, z;};class Y: public virtual X {};class Z: public virtual X { virtual void f() { }};class A: public Y,...
分类:
其他好文 时间:
2014-09-14 17:54:17
阅读次数:
182
#include "iostream"
using namespace std;
/*
1、带有默认构造函数的类对象成员;
2、
*/
//讨论初始化构造函数
//主要讨论在有虚函数情况下的初始化构造函数问题
//含有虚函数的类对象维护一个vptr指向类中的vtbl
class ZoolAnimal
{
public:
ZoolAnimal(){}
~ZoolAnimal(){}
vi...
分类:
其他好文 时间:
2014-08-23 16:52:21
阅读次数:
162
1、当在一个子类当中调用构造函数,其父类构造函数肯定先被调用。如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数。即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virt...
分类:
编程语言 时间:
2014-08-16 10:59:50
阅读次数:
248
代码:
#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
1.虚指针和虚函数表 1.1不含有任何数据成员或者虚函数的class或者struct大小为1,含有虚函数的对象在基地址部分有一个vptr,指向虚函数表,因此大小为4个字节。 1.2动态绑定的原理:假设派生类和基类存在覆盖的关系(基类中定义了虚函数),那么派生类在虚函数表中,会覆盖掉基类相应的虚函.....
分类:
编程语言 时间:
2014-08-02 01:47:42
阅读次数:
356
1.简述用虚函数实现的多态的原理: 编译器发现一个类中有虚函数的时候,便会立即为此类生成虚函数表vtable.虚函数表的各 表项为指向对应虚函数的指针.编译器还会在此类中隐含插入一个指针vptr(对vc编译器来 说,它插在类的第一个位置上)指向虚函数表.调用此类的构造函数的时候,在类的构造函数 中,...
分类:
编程语言 时间:
2014-07-19 09:24:27
阅读次数:
242