上一篇中我给各位说了一般人认为C++中较为难的东西——指针。其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类、虚基类、纯虚函数等,这些都是概念性的东西,几乎每一本C++书上都会介绍,而平时我们除了会接触到纯虚函数外,其他的不多用。纯虚函数,你可以认为与C#中的抽象方法或接...
分类:
其他好文 时间:
2014-10-06 14:51:10
阅读次数:
261
/*对于此类的模型为:class object{ float _x;//类的nonstatic成员函数 _vptr_Point;//指向虚函数表的指针}virtual table//虚函数表的信息(应该存放的是一些指针)slot1---type info for Point(用于支持RT...
分类:
其他好文 时间:
2014-10-06 11:23:10
阅读次数:
263
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtu...
分类:
其他好文 时间:
2014-10-05 20:06:38
阅读次数:
208
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:cl...
分类:
其他好文 时间:
2014-10-03 20:06:35
阅读次数:
122
http://blog.csdn.net/haoel/article/details/3081328我们简单地复习一下,我们可以通过对象的地址来取得虚函数表的地址,如:typedefvoid(*Fun)(void);Base b;Fun pFun = NULL;cout "<< endl;for(i...
分类:
编程语言 时间:
2014-10-03 00:27:13
阅读次数:
370
写程序的道理就和做其他任何事是一样的, 比如炒个菜, 或者用洛阳铲来考古探方. 下面用其中任何一种事情来进行多态性的实现方法吧: 炒菜(实现多态): 1. 原料: 父类一个, 子类一个或多个 父类里面准备虚函数一个或多个. 子类里面准备相应的虚函数的实现一个或多个.父类的指针一个. 子...
分类:
其他好文 时间:
2014-10-02 17:34:03
阅读次数:
237
__declspec (novtable )关键字,表示这个类不生成虚函数表,但是继承类不影响(不管基类是否使用了关键字)。
class Base1
{
virtual void f(){}
virtual void g(){}
};
class __declspec(novtable ) Base2
{
virtual void...
分类:
其他好文 时间:
2014-10-01 23:48:31
阅读次数:
426
近日学习ATL,通过对宏定义offsetofclass的解惑过程,顺便分析下虚函数表,以及通过虚函数表调用函数的问题。
1 解开ATL中宏定义offsetofclass的疑惑
#define _ATL_PACKING 8
#define offsetofclass(base, derived) ((unsigned long)(static_cast ((derived...
分类:
其他好文 时间:
2014-10-01 20:06:21
阅读次数:
189
c++规定函数动态绑定需要使用虚函数来实现。具体的实现方法是:动态联编使用对象的引用或对象的指针来操作虚函数,但是如果使用对象来操作虚函数的话,仍然会采用静态联编的方式。#include<iostream>
usingnamespacestd;
classA
{
public:
virtualvoidprintA()
{
co..
分类:
编程语言 时间:
2014-09-30 15:20:30
阅读次数:
179