可以理解为dll,so,或者单独的类,方便第三方或者其它模块代码使用,借用这个连接
https://www.cnblogs.com/xiaocaocao/p/8451838.html
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();
}
void 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;
}
}