随笔分类 - 

摘要:RTTI (Run Time Type info) 这个神奇的东西用于存储类的相关信息,用于在运行时识别类对象的信息。C++ 里面只记录的类的名字和类的继承关系链。使得编译成二进制的代码,对象可以知道自己的名字(ASCII),以及在继承链中的位置。 C++ 里面提供 一个关键字 typeid , 一 阅读全文
posted @ 2016-07-06 23:31 dzqabc 阅读(910) 评论(1) 推荐(0)
摘要:ref:http://bbs.csdn.net/topics/360249561一个继承了两个虚基类又增加了自己的一个虚函数pif的类,sizeof(指向pif的指针)竟然是8(X86)。我是从这里http://www.codeproject.com/KB/cpp/FastDelegate.aspx... 阅读全文
posted @ 2014-10-25 22:36 dzqabc 阅读(1375) 评论(0) 推荐(0)
摘要:多态性----vptr----vtable(讲了虚表实现的功能晚绑定,讲多重继承中虚表的实现)C++中多态的实现原理(vc示例讲解虚表结构,包括多重继承) 阅读全文
posted @ 2014-08-26 00:21 dzqabc 阅读(246) 评论(0) 推荐(0)
摘要:首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,只有这样子类才能在构造函数里使用基类的成员,所以是创建子类时先调用基类的构造函数然后再调用自己的构造函数。通俗点说,你要用某些物品,但这些物品你没办法自己生产,自然就要等别人生产出来,你才能拿来用。接着就是析构函数了,上面说到子类是将基类的成员变成自己的成员,那么基类就会只存在子类中直到子类调用析构函数后。做个假设:假如在基类的析构函数调用比子类的先,这样会发生什么事呢?类成员终止了,而类本身却还 阅读全文
posted @ 2011-10-31 20:56 dzqabc 阅读(3963) 评论(1) 推荐(3)
摘要:多态是面向对象的基本特征之一。而虚函数是实现多态的方法。那么virtual function到底如何实现多态的呢?1 基类的内存分布情况请看下面的sampleclass A{void g(){.....}};则sizeof(A)=1;如果改为如下:class A{public: virtual void f() { ...... } void g(){.....}}则sizeof(A)=4! 这... 阅读全文
posted @ 2011-10-25 00:16 dzqabc 阅读(5697) 评论(0) 推荐(1)
摘要:Thunk 技术的一个改进 作者:南风 下载源代码 摘要:介绍了 thunk 技术中如何避免直接写机器码。 关键字:Thunk 机器码 this指针 Thunk技术,一般认为是在程序中直接构造出可执行代码的技术(在正常情况下,这是编译器的任务)。《深度探索C++对象模型》中对这个词的来源有过考证(在中文版的162页),说thunk是knuth的倒拼字。knuth就是大名鼎鼎的计算机经典名著《Th... 阅读全文
posted @ 2011-06-29 00:37 dzqabc 阅读(511) 评论(0) 推荐(0)
摘要:2009年7月30日 kunlun 发表评论 阅读评论 链接: C++虚函数探索笔记(1)——虚函数的简单示例分析 C++虚函数探索笔记(2)——虚函数与多继承 C++虚函数探索笔记(3)——延伸思考:虚函数应用的一些其他情形 关注问题: 虚函数的作用 虚函数的实现原理 虚函数表在对象布局里的位置 虚函数的类的sizeof 纯虚函数的作用 多级继承时的虚函数表内容 虚函数如何执行父类代码 多继承... 阅读全文
posted @ 2011-06-28 00:31 dzqabc 阅读(2405) 评论(0) 推荐(0)
摘要:C++虚函数探索笔记(1)——虚函数的简单示例分析 C++虚函数探索笔记(2)——虚函数与多继承 C++虚函数探索笔记(3)——延伸思考:虚函数应用的一些其他情形 关注问题: 虚函数的作用 虚函数的实现原理 虚函数表在对象布局里的位置 虚函数的类的sizeof 纯虚函数的作用 多级继承时的虚函数表内容 虚函数如何执行父类代码 多继承时的虚函数表定位,以及对象布局 虚析构函数的作用 虚函数在QT的... 阅读全文
posted @ 2011-06-22 00:28 dzqabc 阅读(427) 评论(0) 推荐(0)
摘要:多态性 (polymorphism) 是面向对象编程的基本特征之一。而在 C++ 中,多态性通过虚函数 (virtual function) 来实现。我们来看一段简单的代码: #include <iostream>using namespace std;class Base{ int a;public: virtual void fun1() { cout << "Base::fun1()" << endl; } virtual void fun2() { cout << "Base::fun2()" &l 阅读全文
posted @ 2009-08-05 16:52 dzqabc 阅读(460) 评论(2) 推荐(0)