C++纯虚函数实现接口

来源:互联网 发布:设计公司logo软件 编辑:程序博客网 时间:2024/06/16 10:59

C++纯虚函数

纯虚函数语法 

virtual type functionname()=0;

virtual声明的方法后加上=0是纯虚函数

Java Interface接口

Java 中使用Interface开放接口,让另一个类implements interface来达到逻辑和接口分离的作用
Java Interface接口

C++实现接口

利用两个特性
1. 纯虚函数必须被派生类实现
2. C++向上造型
抽象类相当于Java的Interface

Java:public interface api {    void onCall();}C++:class api {public:    void onCall() = 0;  }

派生类相当于Java的implements

Java:public class apiCtx extends api {    void onCall() {        xxx    }}C++:class apiCtx : public api {public:    void onCall() {        xxx    }}

通常在逻辑处理的class中会把接口实现类当作参数传入

Java: demo实现接口 ctx完成逻辑处理 调用时把demo传递给ctxclass demo implements ctx.api {public:    void onCall() {        xxx    }}class ctx {    private api api_;    public interface api {        void onCall();    }    public void call(api api) {        api_ = api;        api_.onCall();    }}调用: ctx a;     demo b;     a.call(b);
C++: 抽象类api作为接口 派生类apiCtx和apiChild实现接口   Content完成逻辑 调用时传入派生类决定调用的接口#include <iostream>#include <vector>#include <map>#include <stdlib.h>#include "inc.h"using namespace std;class api {public:    virtual void onCall() = 0;};class apiCtx : public api{public:    void onCall() {        printf("apiCtx.onCall\n");    }};class apiChild : public api {public:    void onCall() {        printf("apiChild.onCall\n");    }};class Content {public:    void onExec(api *api) {        api_ = api;        api_->onCall();    }private:    api *api_;};int main(void){    Content ctx;    apiCtx  a;    apiChild b;    ctx.onExec(&a);    ctx.onExec(&b);    getchar();    return 0;}

总结

OOP语言似乎都有些共通的地方 一些特性都能用不同的方式实现
接下来实践中多把握这一点