zoukankan      html  css  js  c++  java
  • C++接口定义及实现举例

    一、接口的定义

        有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据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 }

    到此为止,基本完整演示了接口的定义及实现,有不足之处,请指教。^-^...

  • 相关阅读:
    TFS应用层服务器获取F5用户的真实IP地址(高可用性)
    安装TFS(2015)工作组模式代理服务器(Agent)
    Team Foundation Server 15 功能初探
    TFS 2013 生成(构建)历史记录保持策略(Retention Policy)
    TFS代码变更和工作项关联,为系统变更提供完美的跟踪轨迹
    修改TFS客户端的工作区类型
    比较TFS与SVN,你必须知道的10点区别
    数据字典
    查看源码 类图结构图(Eclipse + Idea)
    Mybatis对应的java和数据库的数据类型
  • 原文地址:https://www.cnblogs.com/xiaocaocao/p/8451838.html
Copyright © 2011-2022 走看看