zoukankan      html  css  js  c++  java
  • 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();

    }

    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;

    }

    }

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


    原文链接:http://yinzhezq.blog.163.com/blog/static/164862890201141794629207/

  • 相关阅读:
    30以后,程序员一定要转管理岗吗?
    C#调用Bartender打印绑定数据库,动态设置Sql
    记一次 加载大量数据时不影响界面UI的经历
    火狐浏览器安装印象笔记剪藏
    VS自定义模板-以自定义类模板为样例
    x86架构下win 系统下使用Vmware+ubantu+qemu 模拟arm64架构+Kylin系统
    ES6操作数组的7中方法
    Vue 动态绑定CSS样式
    C# 使用HtmlAgilityPack 抓取 网站链接
    elementui——表格的相同内容单元格合并
  • 原文地址:https://www.cnblogs.com/xieyuan/p/3787430.html
Copyright © 2011-2022 走看看