码迷,mamicode.com
首页 > 其他好文 > 详细

解口的定义与实现

时间:2020-11-10 10:35:40      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:具体细节   属性   interface   ons   注意   str   real   文件中   编程   

所谓接口,即将内部实现细节封装起来,外部用户通过预留的接口可以使用接口的功能而不需要知晓内部的具体细节。以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;  
}  

解口的定义与实现

标签:具体细节   属性   interface   ons   注意   str   real   文件中   编程   

原文地址:https://www.cnblogs.com/IcoveJLearningBlog/p/13948327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!