標籤:lex 方式 定義 方法 通訊 說明 teacher out 無法
一、介面的定義
有時候,我們得提供一些介面給別人使用。介面的作用,就是提供一個與其他系統互動的方法。其他系統無需瞭解你內部細節,並且也無法瞭解內部細節,只能通過你提供給外部的介面來與你進行通訊。根據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 }
到此為止,基本完整示範了介面的定義及實現,有不足之處,請指教。^-^...
C++介面定義及實現舉例