当我们使用别人的一组类时,很可能这一组类在编写上是毫不相干的。虽然它们在现实的概念中是有关系的。而且这些类里面可能有一些方法是用的同样形式的函数,正好是我们经常要用到的。那么如果在使用这些类的时候原封不动的用,如果是需要取得实例的指针之后,调用相应的函数,则必须要自己做判断类型。但是可以用添加接口的方式来实现编写更加容易一些。 //目标:为已经写好的不相干类添加接口。 //方法:将原类再封装一次,使其具有原先的行为和数据同时具有接口。 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(); 
|