C++接口定义及实现举例

摘要:
接口的作用,就是提供一个与其他系统交互的方法。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家参考。1011//提供给外面使用的接口一般采用纯虚函数1213virtualvoidSetName=0;1415virtualconststringGetName()=0;1617virtualvoidWork()=0;1819}二、接口实现实现接口是通过继承接口的子类来实现的,不同的子类可以实现不同效果,即使所谓多态。

一、接口的定义

有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家参考。(不想做过多说明,大家一看就应该能够明白)

1 Class IPerson
2 
3 {
4 
5 public6 
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:publicIPerson
2 
3 {
4 
5 public6 
7 CTeacher(){};
8 
9    virtual ~CTeacher();
10 
11    stringm_strName;
12 
13    void SetName(const string &strName);
14 
15    const stringGetName();
16 
17    voidWork();
18 
19 }
20 
21 void CTeacher::SetName(const string &strName)
22 
23 {
24 
25     m_strName =name;
26 
27 } 
28 
29 const stringCTeacher::GetName()
30 
31 {
32 
33     returnm_strName;
34 
35 }
36 
37 voidCTeacher::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 = newCTeacher();
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 voidmain()
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++接口定义及实现举例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TCP/UDP socketDjango 配置使用日志下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

编写你的第一个 Java 版 Raft 分布式 KV 存储

前言 本文旨在讲述如何使用 Java 语言实现基于 Raft 算法的,分布式的,KV 结构的存储项目。该项目的背景是为了深入理解 Raft 算法,从而深刻理解分布式环境下数据强一致性该如何实现;该项目的目标是:在复杂的分布式环境中,多个存储节点能够保证数据强一致性。 项目地址:https://github.com/stateIs0/lu-raft-kv 欢...

硬盘接口详细解释

硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。 硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起...

java8函数式接口(Functional Interface)

介绍 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 lambda 表达式(箭头函数)。 函数式接口代表的一种契约, 一种对某个特定函数类型的契约。Lambda表达式不能脱离上下文而存在,它必须要有一个明确的目标类型(interface),而这个目标类型就是...

学习pycharm----自动化接口

1.pycharm中安装requests a:打开pycharm软件,点击file-setting b:在目录下点击Project Interpreter,在目录的右侧,点击右上方的+ c: 在输入框中输入requests,点击安装(提示sucessful时,表名安装第三方库成功) ps:在pycharm中安装其他第三方库是一样的步骤 2.使用pychar...

Postman高级应用——串行传参和动态传参详解(转发)

目录 串行传参 动态传参 使用的接口是微信公众号开发文档里面的接口,详细请看开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 首先需要获取到接口测试号,开始开发>接口测试号申请>获得appID和appsecret,位置为:https://mp.w...

(转)仅供个人学习-接口测试工具:jmeter、postman、soapUI的区别

1.  用例组织方式 首先是用例组织方式的不同,不同的目录结构与组织方式代表不同工具的测试思想,学习一个测试工具应该首先了解其组织方式。 SoapUI的组织方式如下图,最上层是WorkSpace,每个窗口只可以打开一个WorkSpace(这是一个xml文件),每个Project也是一个单独的xml文件(为了协同工作,也可以通过设置将其转化为一堆文件集合),...