解口的定义与实现

Posted icovejlearningblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解口的定义与实现相关的知识,希望对你有一定的参考价值。

所谓接口,即将内部实现细节封装起来,外部用户通过预留的接口可以使用接口的功能而不需要知晓内部的具体细节。以C++为例:通过类实现面向对象的编程,在基类中也只给出纯虚函数的声明,然后在派生类中实现纯虚函数的具体定义的方式实现接口,不同派生类的实现接口的方式也不同。ex:

//1.类接口的定义:通常在头文件中完成类接口的定义/*InterfaceDefineAndRealize.h*/---第一个文件
#ifndef INTERFACE_DEFINE_AND_REALIZE
#define INTERFACE_DEFINE_AND_REALIZE
#include 
using std::string;

class Person{
    private:
    string StrName;
    public:
    Person():StrName("###"){};
    virtual ~Person(){};
    virtual void Eat() = 0;//人需要吃饭
    virtual void Sleep() = 0;//人需要睡觉
    virtual void SetName(const string name) = 0;//人都有名字
    virtual string GetName() = 0;//获取名字
    virtual void Work() = 0;//人可能有工作
};
//实现接口
//实现接口是通过派生类实现,每个派生类依据自身特点,可以获取同一接口的不同实现,即多态
class Student:public Person{
    private:
    string StrName;
    public:
    Student():StrName("***"){};
    ~Student(){};
    void Eat();
    void Sleep();
    void SetName(const string name);
    string GetName();
    void Work();
};
#endif

//2.接口的实现:通常在源文件中完成接口的实现 /*InterfaceDefineAndRealize.cpp*/---第二个文件
#include "InterfaceDefineAndRealize.h"
#include 
#include 
using namespace std;

//接口的外部实现
void Student::Sleep(){
    cout << "Student sleep." << endl;
}
void Student::Eat(){
    cout << "Student eat." << endl;
}
void Student::SetName(const string name){
    StrName = name;
}
void Student::Work(){
    cout << "Student work." << endl;
}
string Student::GetName(){
    return StrName;
}
//需要导出的函数。即用户在外部可以调用的接口
_declspec(dllexport)bool GetPersonObject(viod* _RtObject){
    Person* pMan = NULL;
    pMan = new Student();
    *_RtObject = (void*)pMan;
    return true;
}

//3.接口的导入:通常在模块定义文件中完成/*InterfaceDefineAndRealize.def*/---第三个文件
LIBRARY InterfaceDefineAndRealize
EXPORTS
GetPersonObject
//新建项目,加载这三个文件,在项目属性->配置属性->常规->配置类型中,选择"动态库.dll",生成可用动态库---注意:项目名称必须与模块定义文件中LIBRARY后面定义的名字相同,生成的动态库和导入库在该项目的当前工作目录下。
    
//4.接口的调用
#include   
#include "InterfaceDefineAndRealize.h"  
bool _declspec(dllimport) GetPersonObject(void** _RtObject);  
int main()  
{  
    Person* person=NULL;  
    void* pObj=NULL;  
    if(GetPersonObject(&pObj))//调用接口  
    {  
        person=(Person*)pObj;  
        person->Eat();  
        person->Sleep();  
        person->SetName("zhang hui");  
        std::cout<GetName()<        person->Work();  
  
        if(person!=NULL)  
        {  
            delete person;  
            person=NULL;  
        }  
    }  
    system("pause");  
    return 0;  
}  

以上是关于解口的定义与实现的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

VS Code中自定义Emmet代码片段

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用

VS中添加自定义代码片段——偷懒小技巧

代码片段如何使用CSS来快速定义多彩光标

getSupportFragmentManager() 在活动扩展片段中未定义