C++虚函数表解析陈皓http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了...
分类:
编程语言 时间:
2014-08-26 19:22:46
阅读次数:
251
以下是笔者在ubuntu系统下编译运行通过的一些反应c++基础特性的例子,包括类,结构体,构造函数,析构函数,函数的重载,this指针,类的继承,虚函数,函数的覆盖和隐藏等。(由于格式问题代码中的乱码是一些文字描述)/*#include#includeusing namespace std;stru...
分类:
编程语言 时间:
2014-08-26 11:25:06
阅读次数:
316
公司开发C++是使用vs2008,编译的时候使用联合编译IncreBuild进行编译;在vs2008中使用visual assistx,如果代码太长,滚动的时候偶尔会出现页面乱码,而且有时候虚函数互相定位也有问题,没有vs2013使用方便,但是在vs2013中又不能直接编译,所有寻思做个插件解决编译...
分类:
其他好文 时间:
2014-08-25 11:35:24
阅读次数:
223
前言 在使用 C++ 实现多态的时候,有一点一定要清楚:当派生类对象经由基类指针被删除,而此基类的析构函数没有被声明为虚函数的话,那么析构函数只会释放基类部分的成员而无视派生类成员。 如果不对这一点加以防范,那么很多时候,会带来内存泄露这样灾难性的后果。解决之道 1. 对于要拿来实现多态的基类...
分类:
其他好文 时间:
2014-08-24 16:34:32
阅读次数:
135
#include "iostream"
using namespace std;
/*
1、带有默认构造函数的类对象成员;
2、
*/
//讨论初始化构造函数
//主要讨论在有虚函数情况下的初始化构造函数问题
//含有虚函数的类对象维护一个vptr指向类中的vtbl
class ZoolAnimal
{
public:
ZoolAnimal(){}
~ZoolAnimal(){}
vi...
分类:
其他好文 时间:
2014-08-23 16:52:21
阅读次数:
162
虚函数和模板是C++里面很棒的特征,他们都提供了一种方法,让程序在编译中完成一些计算,去掉的这些计算在比较low的编程方式中,是需要在程序运行中执行的。在这里,我要强调的是:“在编译过程中完成一些计算”。
我会举两个例子,一个是虚函数的,比较简单,另一个例子是关于特征模板的,在例子中,根据模板参数的类型自动选择模板的底层数据结构。...
分类:
其他好文 时间:
2014-08-23 11:25:10
阅读次数:
161
1、 单个虚拟继承
只是为了分析而已,实际中并没有太大的作用。跟虚拟继承相关的派生类对象的内存布局跟具体的编译器相关。
(1)VS编译器:无论有无虚函数,必然含有虚基类表指针。虚基类表中的内容为本类实例的偏移和基类实例的相对偏移值。如果有虚函数,那么基类的虚函数表跟派生类的虚函数表是分开的。
在内存布局上,地址从低到高,顺序如下:派生类的虚函数表指针+虚基类表指针+派生类的成员变量+“...
分类:
编程语言 时间:
2014-08-23 11:24:30
阅读次数:
357
条款41:了解隐式接口和编译期多态
n classes和templates都支持接口和多态
n 对classes而言接口是显式的,以函数签名为中心,多态则是通过虚函数发生于运行期。
n 对templates参数而言,接口是隐式的,奠基于有效表达式,多态则是通过template具现化和函数重载解析发生于编译器。
条款42:了解typename的双重意义
n 声明模板参数,前缀关键字...
分类:
编程语言 时间:
2014-08-22 22:37:43
阅读次数:
261
1. 面向对象编程的三个基本概念:数据抽象(类),继承(类继承)和动态绑定(运行时决定使用基类函数还是派生类函数)。面向对象编程的关键思想是多态性。
2. 派生类可以继承基类中定义的成员;派生类可以调用基类函数;派生类可以重定义基类的函数;派生类可以定义新的数据成员和函数成员。
3. 基类通过关键字virtual来指出希望派生类重新定义的函数(虚函数)。而基类希望派生类继承的函数不能使用virtual关键字。
4. 通过动态绑定可以使我们在继承层次中使用任意类型的对象,而不用关心对象的具体类型。使用这些类的...
分类:
编程语言 时间:
2014-08-22 16:25:21
阅读次数:
220
Windows API的各个函数之间的关系很难理清, MFC只是使用抽象,封装,继承,多态性和模块化的面向对象原则,在逻辑上将Windows API分类。 抽象层次较高的类库和许多虚函数都会产生大而慢的应用程序。为了保证速度更快,规模更小,AFX开发组,发明了其他机制来处理Windows消息。...
分类:
其他好文 时间:
2014-08-22 10:41:46
阅读次数:
208