刚刚看到了C++代理模式,简单的学习了一下,当一个应用程序执行时,可以采用这种方法,至于到底怎么用,我还不知道。 A->B->C。 当应用A要执行的时候,采用代理B,B继承自协议C,实现C中的虚方法,C为一个抽象类,包含一个纯虚函数。这样的话,主函数中只需要执行A的方法就可以了。 下面用代...
分类:
编程语言 时间:
2014-07-02 19:22:40
阅读次数:
213
游戏中的人物伤害值计算问题。
(一)方法(1):一般来讲可以使用虚函数的方法:
class GameCharacter {
public:
virtual int healthValue() const; //返回人物的体力值,派生类可以做出修改
...
}; 这确实是一个显而易见的设计选择。但因为这样的设计过于显而易见,可能不会...
分类:
编程语言 时间:
2014-07-01 15:39:40
阅读次数:
172
多态性可分为两类:静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,动态多态性是通过虚函数实现的。每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。没有虚函数的C++类,是不会有虚函数表的。两张图:简单例子: 1...
分类:
编程语言 时间:
2014-06-30 22:59:27
阅读次数:
379
/** ************重载,重写(覆盖),隐藏的识别*************重载:如何调用取决于参数覆盖:如何调用取决于object(有virtual 同名 同参)隐藏:如何调用取决于pointera、编译时多态性:通过重载函数实现 b、运行时多态性:通过虚函数实现。包含纯虚函数(vir...
分类:
其他好文 时间:
2014-06-29 00:26:59
阅读次数:
199
override是指派生类重写基类的虚函数,就像某个类中...
分类:
其他好文 时间:
2014-06-28 07:41:31
阅读次数:
156
前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函...
分类:
其他好文 时间:
2014-06-25 22:30:46
阅读次数:
226
将C++对象保存到共享内存上时,由于程序DWON掉或者其他原因停掉程序(不清除共享内存)重新拉起程序时,共享内存上C++对象的虚函数指针已经失效。为了使得不清除共享内存重启程序时C++对象仍然有效,需要恢复共享内存上C++对象的虚函数表,通过C++的placement new可以做到。 假设 ...
分类:
编程语言 时间:
2014-06-24 12:17:59
阅读次数:
206
C++规定了虚函数的行为,但是将实现交给了编译器的作者.
通常,编译器处理虚函数的方法是给每一个对象添加一个隐藏成员.隐藏成员中保存了一个指向函数地址数组的指针.
这个数组称为虚函数表(virtual function table,vtbl).虚函数表中存储了为类对象进行声明的虚函数的地址.
例如:基类对象包含一个指针,该指针指向基类的虚函数表.
派生类对象包含一个指针,该指针指向一个独立...
分类:
编程语言 时间:
2014-06-22 17:06:32
阅读次数:
239
大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类如果覆写,在基类指针或者引用来指向子类的时候会实现动态绑定。
但如果指针去调用非虚函数,这个时候会调用C++的静态绑定,去判断当前的指针是什么类型,就去执行哪个类型的函数。
很有一种比较经典的用法,就是Template Method模式,基类定义一个非虚的算法框架,里面具体定义一些纯虚的函数片段,由子类来进行实现,从...
分类:
编程语言 时间:
2014-06-17 18:48:34
阅读次数:
325