• [转]C++接口定义及实现举例


    一、接口的定义

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

    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;

           }

    }

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

  • 相关阅读:
    IOS 自动布局-UIStackPanel和UIGridPanel(三)
    IOS 自动布局-UIStackPanel和UIGridPanel(二)
    IOS 自动布局-UIStackPanel和UIGridPanel(一)
    我的新博客
    Topcoder SRM655 DIV1 500 Nine
    BestCoder Round #38 1002 Greatest Greatest Common Divisor 筛法
    BestCoder Round #38 1001 Four Inages Strategy 暴力
    Google Code Jam 2015 Round 1A Haircut 二分
    Google Code Jam 2015 Round 1A Mushroom Monster 水
    Topcoder SRM656 DIV1 250 RandomPancakeStack 概率DP
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2124250.html
Copyright © 2020-2023  润新知