其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
为已经编写好的不相干类添加接口

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

       当我们使用别人的一组类时,很可能这一组类在编写上是毫不相干的。虽然它们在现实的概念中是有关系的。而且这些类里面可能有一些方法是用的同样形式的函数,正好是我们经常要用到的。那么如果在使用这些类的时候原封不动的用,如果是需要取得实例的指针之后,调用相应的函数,则必须要自己做判断类型。但是可以用添加接口的方式来实现编写更加容易一些。

//目标:为已经写好的不相干类添加接口。
//方法:将原类再封装一次,使其具有原先的行为和数据同时具有接口。

class T1
{
   int i;
public:
   void Set(int I){i=I;};
   void Show()
   {
     cout<<"this is T1:"<<i<<endl;
   };
};

class T2
{
 int i;
public:
 void Set(int I){i=I*2;};
 void Show()
 {
  cout<<"This is T2:"<<i<<endl;
 };
};

//T1 和 T2是两个不相干的类,但是有相同形式的成员函数.
//定义一个接口类


class InterfaceT
{
public:
 virtual void Set(int)=0;
 virtual void Show()=0;
 virtual ~InterfaceT(){};
};

//把原始的类用接口封装
class PackT1:virtual public InterfaceT,T1
{
public:
 void Set(int I)
 {
  T1::Set(I);
 };
 void Show(){
  T1::Show();
 };
};
class PackT2:virtual public InterfaceT,T2
{
public:
 void Set(int I)
 {
  T2::Set(I);
 };
 void Show(){
  T2::Show();
 };
};

//之后可以用PackT1和PackT2类生成实例,它们具有原先T1和T2类行为数据的同时,可以用接口指针访问.

例如:
PackT1 t1;
PackT2 t2;
InterfaceT* It;
It=&t1;
It->Set(5);
It->Show();
It=&t2;
It->Show();




相关文章

相关软件