c++介面定義及實現舉例

pamxy發表於2013-06-30

轉自:http://yinzhezq.blog.163.com/blog/static/164862890201141794629207/

一、介面的定義

有時候,我們得提供一些介面給別人使用。介面的作用,就是提供一個與其他系統互動的方法。其他系統無需瞭解你內部細節,並且也無法瞭解內部細節,只能通過你提供給外部的介面來與你進行通訊。根據c++的特點,我們可以採用純虛擬函式的方式來實現。這樣做的好處是能夠實現封裝和多型。現舉一例項,供大家參考。(不想做過多說明,大家一看就應該能夠明白)

Class IPerson

{

public:

IPerson(){};

virtual ~IPerson()=0;//注意,最好要定義此虛解構函式,能夠避免其實現不能正常呼叫解構函式的問題

//提供給外面使用的介面一般採用純虛擬函式

virtual void SetName(const string &strName)= 0;

virtual const string GetName()= 0;

virtual void Work()= 0;

}

二、介面實現

實現介面是通過繼承介面的子類來實現的,不同的子類可以實現不同效果,即使所謂多型。

Class CTeacher:public IPerson

{

public:

CTeacher(){};

virtual ~CTeacher();

string m_strName;

void SetName(const string &strName);

const string GetName();

void Work();

}

CTeacher::SetName(const string &strName)

{

m_strName = name;

}

const string CTeacher::GetName()

{

return m_strName;

}

void CTeacher::Work()

{

cout <<"I am teaching!"<<endl;//老師的工作是教書,其他職業的人做的工作是不一樣的。

}

三、介面匯出

bool GetIPersonObject(void** _RtObject)
{

IPerson* pMan = NULL;

pMan = new CTeacher();

*_RtObject = (void*)pMan ;

return true;

}

__declspec(dllexport) bool GetIPersonObject(void** _RtObject);

四、介面使用

#include "IPerson.h"

#pragma comment(lib,"IPerson.lib")

bool __declspec(dllimport) GetIPersonObject(void** _RtObject);

/* 測試例子 */

void main()

{

IPerson * _IPersonObj = NULL;

void* pObj=NULL;

if (GetIPersonObject(&pObj))

{

// 獲取物件

_IPersonObj = (IPerson *)pObj;

// 呼叫介面,執行操作

_IPersonObj ->SetName(“Tom”);

string strName = _IPersonObj->GetName;

_IPersonObj->work();

}

if (_IPersonObj !=NULL)

{

Delete _IPersonObj ;

_IPersonObj = NULL;

}

}

到此為止,基本完整演示了介面的定義及實現,有不足之處,請指教。^-^...


相關文章