一、接口的定义
有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据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 }
到此为止,基本完整演示了接口的定义及实现,有不足之处,请指教。^-^...
原文链接: https://www.cnblogs.com/xiaocaocao/p/8451838.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/269247
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!