近日学习ATL,通过对宏定义offsetofclass的解惑过程。顺便分析下虚函数表,以及通过虚函数表调用函数的问题。 1 解开ATL中宏定义offsetofclass的疑惑 #define _ATL_PACKING 8 #define offsetofclass(base, derived) (( ...
分类:
其他好文 时间:
2017-06-18 12:10:53
阅读次数:
275
C++的多态性实现机制剖析 1. 多态性和虚函数 #include <iostream.h> class animal { public: void sleep() { cout<<"animal sleep"<<endl; } void breathe() { cout<<"animal brea ...
分类:
编程语言 时间:
2017-06-17 22:35:22
阅读次数:
236
总结:1、按1继承顺序先排布基于每个父类结构。2、该结构包括:基于该父类的虚表、该父类的虚基类表、父类的父类的成员变量、父类的成员变量。3、多重继承且连续继承时,虚函数表按继承顺序排布函数与虚函数。4、而后排布子类的成员变量。5、排布虚基类的虚函数表。6、虚基类的成员变量 #类中的元素 0. 成员变 ...
分类:
编程语言 时间:
2017-06-17 18:39:33
阅读次数:
172
将一个子类的对象赋值给父类指针,当删除该指针时,如果没有将基类的指针写为虚函数,那么只会调用基类的析构函数。 测试上面的代码: 1、ClxBase1* cp = new ClxDerived(); 当删除指针时,会打印三条Log; 2、ClxBase2* cp = new ClxDerived(); ...
分类:
其他好文 时间:
2017-06-16 20:17:48
阅读次数:
139
转自:http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用 ...
分类:
编程语言 时间:
2017-06-15 23:39:04
阅读次数:
337
第十二章 多态与虚函数 一、多态的概念 向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为 具有不同功能的函数名可以用同一个函数名,以实现用一个函数名调用不同内容的函数 *静态多态和动态多态(编译时的多态性和运行时的多态性) 静态多态的特点:调用速率快、效率高,但缺少灵活性,在程序运行前 ...
分类:
其他好文 时间:
2017-06-13 18:19:59
阅读次数:
157
Java基础常见英语词汇(共70个) ['?bd?ekt] ['?:rientid]导向的 ['pr??ɡræm??]编程 OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 [d?'vel?pm?nt][k?t]工具箱 ...
分类:
编程语言 时间:
2017-06-12 13:14:31
阅读次数:
607
1.重载和重写的区别: 重载overload:在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态。 重写override:也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被 ...
分类:
编程语言 时间:
2017-06-11 11:04:05
阅读次数:
180
虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次: 输出的结果是 这个例子是虚函数的一个典型应用,通过这个例子,也许你就对虚函数有了一些概念。它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻 ...
分类:
编程语言 时间:
2017-06-10 20:29:41
阅读次数:
193
通过以上对比可以看到,同样都是在派生类中声名了一个与基类同名的成员函数;redefinition没有一定要是虚函数,override一定要是虚函数。 redefinition“隐藏” override“覆盖”,实现了多态。 ...
分类:
其他好文 时间:
2017-06-09 22:32:32
阅读次数:
154