当用ATL向导来创建一个接口的时候,向导会让我们选择Dual或者Custom.
那么它们到底有什么分别呢?
Dual
鼠标移上去,其实是有个说明的。下面的截图没有显示后面的一些文字,
实际意思是说这个接口同时支持IDispatch方式和vtable方式,这大概也就是双接口(Dual)名字的来源。
vtable调用方式,指的是直接通过接口指针的虚函数表。比如
CComPtr spCar;...
分类:
其他好文 时间:
2014-09-24 13:02:26
阅读次数:
222
虚函数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
1、多态地实现A:C++中多态的实现原理是怎样的?Q:通过迟邦定技术(latebinding)实现。具体实现原理如下:1.基类中函数带virtual关键字,表示该方法为虚函数。2.子类继承基类,并对虚函数重写(亦可以不重写)。3.编译器为每个包含虚函数的类都会创建一个虚表(vtable)存放虚函数的...
分类:
编程语言 时间:
2014-09-09 15:08:59
阅读次数:
384
编译工程时报错:error: undefined reference to vtable for ClassName,造成这种错误的原因很多,甚至在纯C++编程过程中也可能出现。下面根据自己情况,具体问题具体分析。原因:在原先没有Q_OBJECT关键字的工程中添加了该关键字,但是没有执行qmake,直接编译导致出现该错误。...
分类:
其他好文 时间:
2014-08-20 22:44:33
阅读次数:
275
一、构造函数为什么不能为虚函数
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。
2. 从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函...
分类:
其他好文 时间:
2014-08-09 11:46:37
阅读次数:
278
1.简述用虚函数实现的多态的原理: 编译器发现一个类中有虚函数的时候,便会立即为此类生成虚函数表vtable.虚函数表的各 表项为指向对应虚函数的指针.编译器还会在此类中隐含插入一个指针vptr(对vc编译器来 说,它插在类的第一个位置上)指向虚函数表.调用此类的构造函数的时候,在类的构造函数 中,...
分类:
编程语言 时间:
2014-07-19 09:24:27
阅读次数:
242
构造函数为什么不能是虚函数从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造...
分类:
编程语言 时间:
2014-07-19 00:05:20
阅读次数:
321
转载自 居家懒人http://www.cnblogs.com/JD85/archive/2012/09/17/2688128.html加入写了新场景SecondScene,结果在cpp文件里类名地方报错说undefined reference to `vtable for SecondScene',...
分类:
移动开发 时间:
2014-07-16 20:30:58
阅读次数:
205
For example:1 class ATL_NO_VTABLE CMath :2 public CComObjectRootEx3 public CComClass4 public IMath,5 public IAdvancedMath6 {7 ....8 };
分类:
其他好文 时间:
2014-06-16 13:03:36
阅读次数:
196