考试网 >> IT认证 >> 等级 >> 等级动态 >> C语言的多态实现

C语言的多态实现

发布时间:2006-07-25 12:02     点击:
分页:上一页  1 [2] 3  下一页

{

m_pInterface= pInterface;

}

DoMyAct_Do()

{

if(m_pInterface==NULL) return;

m_pInterface->Foo1();

c=m_pInterface->Foo2();

}

子类Act1:实现虚结构,含有MyVirtualInterface st[MAX]; 有以下函数:

MyVirtualInterface* Act1_CreatInterface()

{

index=FindValid() //对象池或者使用Malloc !应该留在外面申请,实例化

if(index==-1) return NULL;

St[index].Foo1=Act1_Foo1; // Act1_Foo1要在下面具体实现

St[index].Foo2=Act1_Foo2;

St[index].Foo3=Act1_Foo3;

Return &st [index];

}

子类Act2同上。

在main中,假设有一个对象List。List中存贮的是MyVirtualInterface指针,则有:

if( (p= Act1_CreatInterface()) != NULL)

List_AddObject(&List, p); //Add All

While(p=List_GetObject()){

DoMyAct_SetInterface(p);//使用Interface代替了原来大篇幅的Switch Case

DoMyAct_Do();//不要理会具体的什么样的动作,just do it

}

FREE ALL。

  在微系统里面,比如嵌入式,通常使用对象池的技术,这个时候可以不用考虑释放的问题(对象池预先没有空间,使用Attach,在某个函数中申请一个数组并临时为对象池分配空间,这样函数结束,对象池就释放了)

  但是在Pc环境下,由于程序规模比较大,更重要的是一些特殊的要求,使得对象的生命周期必须延续到申请的那个函数体以外,就不得不使用malloc,实际上即使在C++中,new对象的自动释放始终是一个令人头疼的问题,新的标准引入了智能指针。但是就我个人而言,我觉得将内存释放的问题完全的交给机器是不可信任的,它只能达到准最佳。

  你知道设计Java的垃圾回收算法有多困难吗?现实世界是错综复杂的,在没有先验条件下,要想得到精确的结果及其困难。所以我说程序员要时刻将free记在心上,有关程序的健壮性和自我防御将在另外一篇文章中讲述。
分页:上一页  1 [2] 3  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有