一、接口的定义
有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家参考。(不想做过多说明,大家一看就应该能够明白)
1 Class IPerson 2 3 { 4 5 public: 6 7 IPerson() {}; 8 9 virtual ~IPerson()=0 {}; //注意,最好定义此虚析构函数,够避免子类不能正常调用析构函数;如果定义为纯虚析构函数,则必须带定义体,因为子类隐含调用该析构函数。 10 11 //提供给外面使用的接口一般采用纯虚函数 12 13 virtual void SetName(const string &strName)= 0; 14 15 virtual const string GetName()= 0; 16 17 virtual void Work()= 0; 18 19 }
二、接口实现
实现接口是通过继承接口的子类来实现的,不同的子类可以实现不同效果,即使所谓多态。
1 Class CTeacher:public IPerson 2 3 { 4 5 public: 6 7 CTeacher(){}; 8 9 virtual ~CTeacher(); 10 11 string m_strName; 12 13 void SetName(const string &strName); 14 15 const string GetName(); 16 17 void Work(); 18 19 } 20 21 void CTeacher::SetName(const string &strName) 22 23 { 24 25 m_strName = name; 26 27 } 28 29 const string CTeacher::GetName() 30 31 { 32 33 return m_strName; 34 35 } 36 37 void CTeacher::Work() 38 39 { 40 41 cout <<"I am teaching!"<<endl;//老师的工作是教书,其他职业的人做的工作是不一样的。 42 43 }
三、接口导出
1 bool GetIPersonObject(void** _RtObject) 2 { 3 4 IPerson* pMan = NULL; 5 6 pMan = new CTeacher(); 7 8 *_RtObject = (void*)pMan ; 9 10 return true; 11 12 } 13 14 __declspec(dllexport) bool GetIPersonObject(void** _RtObject);
四、接口使用
1 #include "IPerson.h" 2 3 #pragma comment(lib,"IPerson.lib") 4 5 bool __declspec(dllimport) GetIPersonObject(void** _RtObject); 6 7 8 9 /* 测试例子 */ 10 11 void main() 12 13 { 14 15 IPerson * _IPersonObj = NULL; 16 17 void* pObj=NULL; 18 19 if (GetIPersonObject(&pObj)) 20 21 { 22 23 // 获取对象 24 25 _IPersonObj = (IPerson *)pObj; 26 27 // 调用接口,执行操作 28 29 _IPersonObj ->SetName("Tom"); 30 31 string strName = _IPersonObj->GetName; 32 33 _IPersonObj->work(); 34 35 } 36 37 if (_IPersonObj !=NULL) 38 39 { 40 41 Delete _IPersonObj ; 42 43 _IPersonObj = NULL; 44 45 } 46 47 }
到此为止,基本完整演示了接口的定义及实现,有不足之处,请指教。^-^...