OOinC(2):C语言的多态实现方法
相信很多人都看过设计模式方面的书。你有什么经验?桥、代理和工厂设计模式都基于抽象类。使用抽象对象是这里的一个核心。
其实我觉得框架编程的核心问题之一就是抽象,抽象是面向对象编程的一般思想。一个完整的程序是通过构建一个具有抽象性和多态性的骨架而形成的。因为c++语言本身实现了继承和多态,用这样的编程概念(概念是什么意思?跟风,呵呵)是C++中非常普遍的现象,可以说虚(多态)是VC的灵魂。
然而,我们这些使用C语言的人几乎已经把这种多态性忘得一干二净了。经常听前辈说,课?多态性?我们用C,算了吧。可惜我是个固执的人。这么好的东西为什么不用?很开心,在最近的一些纯C代码中,我看到了C中的多态性!现在慢慢听我说。
1。VC中的接口是什么?接口:中文解释是接口,但实际上代表的是纯虚类。但是,我想说的是,VC中的Interface其实是struct。查一下Interface的定义,可以发现有这样一个宏定义:# ifndef Interface # define Interface struct # endif。而且在VC中,如果一个类有虚函数,那么类中就会有vtable,其实就是虚函数的列表。其实c++是由C发展而来的,它只支持语言层面的很多新功能。在C语言中,我们也可以使用这样的函数,前提是我们必须自己实现。
如何在2中实现纯虚类(我称之为纯虚结构)。C
相比之前,相信大家都豁然开朗了。纯虚类可以用struct组合函数指针实现。
示例:typedef struct { void(* foo 1)();char(* foo 2)();char *(* foo 3)(char * ST);} MyVirtualInterface假设我们在主框架中使用桥模式。(我们的主类是DoMyAct,接口实现类是Act1和Act2。)我将依次介绍这些“类”。(C中的“类”前面已经解释过了,这里还有一个,是更早数组的使用方式)
Main class DoMyAct:Main类包含myvirtualinterface * m _ p接口;主类有以下函数:domy act _ set interface(my virtual interface * Pinter face)
{ m _ Pinter face = Pinter face;} DOM yact _ Do()
{ if(m _ Pinter face = = NULL)return;m _ Pinter face-> foo 1();c = m _ Pinter face-> foo 2();}子类Act1:实现虚拟结构,包含my virtual interface ST[max];有以下函数:my virtual interface * act1 _ create interface()
{ index = find valid()//对象池或者使用Malloc!应该留在外面应用,如果(index = =-1)返回null则实例化;ST[index]. foo 1 = act 1 _ foo 1;// Act1_Foo1需要实现ST [index]。foo2 = act1 _ foo2在下面;ST[index]. foo 3 = act 1 _ foo 3;return & ST[index];}子类Act2同上。
0条评论