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 }

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

  • 相关阅读:
    夜神模拟器+seleinm抓取手机app(参考资料集合)
    关于pycharm导入其他项目时出现找不到python无法运行的问题
    关于动态规划的一点研究
    numpy里的randn
    关于pandas里面的合并
    笛卡尔乘积的解释
    Python链表与反链表
    年度总结一下
    Docker的使用初探(一):常用指令说明
    Java开发学习心得(三):项目结构
  • 原文地址:https://www.cnblogs.com/xiaocaocao/p/8451838.html
Copyright © 2011-2022 走看看