先后打印出两行:A is constructed. B is constructed. 调用B的构造函数时,先会调用B的基类及A的构造函数。然后在A的构造函数里调用Print。由于此时实例的类型B的部分还没有构造好,本质上它只是A的一个实例,他的虚函数表指针指向的是类型A的虚函数表。因此此时调用的P ...
分类:
其他好文 时间:
2016-11-21 22:49:38
阅读次数:
159
C++中四种类型转换符的总结 一、reinterpret_cast用法:reinpreter_cast<type-id> (expression) reinterpret_cast操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,即二进制值没有变。例如: int n ...
分类:
编程语言 时间:
2016-11-20 13:15:26
阅读次数:
161
使用一个基类指针删除派生类对象,同时基类的析构函数是非虚的,那么这个指针只会删除派生类对象中的基类的部分,其派生部分不会被删除。造成资源泄漏。而如果一个类并不用作基类,则没必要把析构函数声明为虚的,否则会浪费空间来存储虚函数指针和虚函数表。STL容器并不含虚析构函数,因此最好不要继承STL容器。只要... ...
分类:
其他好文 时间:
2016-11-19 15:41:35
阅读次数:
178
vptr&vtbl virtual point 每一个带有虚函数的对象都会包涵一个指向虚函数表的指针,子类会继承父类的虚函数,所以子类中也会有虚函数表 virtual table 虚函数表拥有一个或复数个虚函数指针,每一个虚函数指针指向实际函数地址,当子类重写了父类的虚函数,子类虚函数表中指向父类此 ...
分类:
其他好文 时间:
2016-11-08 01:45:37
阅读次数:
278
class A {}; class B : public virtual A {}; class C : public virtual A {}; class D : public B, public C {}; int main() { A a; B b; C c; D d; cout << si ...
分类:
编程语言 时间:
2016-11-01 01:10:47
阅读次数:
272
之前大二在学C++的时候一直对虚函数和虚继承有些晕(其实好像就是对virtual这个关键字不太熟悉)现在又学习到了一些,对虚函数表和虚继承的机制有了一点更深入的了解。
关于虚函数以及虚继承的基础知识...
分类:
其他好文 时间:
2016-10-31 16:45:46
阅读次数:
315
GDB调试C++类Linux上调试常用的工具就是gdb了。借助学习C++虚函数表和内存布局的机会顺便学习下gdb常规调试技巧。一,测试用例1,C++头文件(szyu_test_gdb.h)/******************************
*
*Author:szyu
*
*Date:2016.10.25
*
********************************/
#ifndef..
分类:
数据库 时间:
2016-10-27 01:45:29
阅读次数:
212
一些常考的基础知识点个人总结,大神勿喷,欢迎指正。 1.广义表的表尾是指除去表头后剩下的元素组成的表,表头可以为表或单元素值.表尾或为表,或为空表。 2.构造函数不能声明为虚函数。 构造函数为什么不能是虚函数? 1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这 ...
分类:
编程语言 时间:
2016-10-19 20:06:29
阅读次数:
244
0、虽然静态成员函数不存在this指针,但还是不能在一个class里声明同名同参的虚函数和静态成员函数。 1、vftable里一个虚函数表是一个指针 2、delete本质,调用析构函数同时释放内存Object *o = new Object();// use objectdelete o; // w ...
分类:
编程语言 时间:
2016-10-11 21:46:59
阅读次数:
223