您现在的位置是:首页 > 正文

C++纯虚函数实现接口

2024-01-30 21:53:49阅读 0

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传递给ctx
class 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语言似乎都有些共通的地方 一些特性都能用不同的方式实现
接下来实践中多把握这一点

网站文章

  • 深度神经网络中的多任务学习研究综述

    深度神经网络中的多任务学习研究综述

    在机器学习或者深度学习中,都有一个任务目标,例如猫狗分类准确率、回归预测损失最小化等,为了达到的目标,通常都会训练一个单一的(大)模型或者一系列模型(集成学习),然后根据的目标不断的对模型进行调优,直...

    2024-01-30 21:53:20
  • 微信公众号(测试号)开发

    微信公众号(测试号)开发

    微信公众号(测试号)开发问流程及问题记录

    2024-01-30 21:53:06
  • [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列

    [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列

    题目描述题目大意一个序列,每次可以使一段区间内的所有数加一(模四)。问最少的操作次数。思考历程一看这题目,诶,这不就是那...

    2024-01-30 21:52:27
  • aop源码分析之 —— 创建代理对象

    aop源码分析之 —— 创建代理对象

    前言 在上一篇我们分析了AOP生成代理对象的源码流程,我们知道,springaop中,生成代理对象一般有2种,当目标对象实现了接口时,默认使用JDK代理,否则就采用cglib代理,而且,最终调用目标对...

    2024-01-30 21:52:19
  • Linux安装MySQL(使用yum)

    Linux安装MySQL(使用yum)

    镜像下载、域名解析、时间同步请点击 阿里云开源镜像站 安装前准备 一、可以考虑替换国内yum镜像 根据我老中医多年的经验,需要从某些仓库啊之类的下载某些包的时候,最好先看看怎么替换国内的镜像(否则下载...

    2024-01-30 21:52:12
  • vue iview组件表格 render函数的使用

    1 如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到----attrs 来加入而不是props2 动态显示内容:render: (h,params) => {                            const row = params.row;                            const col

    2024-01-30 21:52:04
  • 20张Python高清数据分析全知识地图,数据分析发展路线

    20张Python高清数据分析全知识地图,数据分析发展路线

    公众号:yk 坤帝获取全部数据分析资料今天给大家分享一波很硬的干货,20张数据分析相关的知识地图,马起来慢慢消化~1、数据分析步骤地图2、数据分析基础知识地图3、数据分析技术知识地图4、数据分析业务流...

    2024-01-30 21:51:35
  • 毕业=失业?现在多学一个技能,秋招多50%岗位机会

    毕业=失业?现在多学一个技能,秋招多50%岗位机会

    毕业季到了,又有多少人成为“毕业即失业”大军的一员。今年大学毕业生1020万,但就业岗位没有增加,反而不少企业大规模。春招时招聘会场场爆满!大多数简历为“三无简历”:无实习、无技能、无证书,因此能投递...

    2024-01-30 21:51:23
  • 基础的Dos命令

    打开cmd的方式开始+系统+命令提示符win键+R在任意文件夹下面,按住shift键+鼠标右键点击,在此处打开命令行窗口资源管理器的地址栏前面加上cmd路径管理员方式运行:选择以管理员身份运行常用的D...

    2024-01-30 21:50:55
  • C/C++笔记总结——多态,虚析构与纯虚析构(看了就懂)

    C/C++笔记总结——多态,虚析构与纯虚析构(看了就懂)

    多态实C++面向对象的三大特性之一。面向对象的三大特性:封装,继承,多态。要想实现地址晚绑定,只需要在最大的父类中的成员函数前面加一个关键字virtual,将这个函数变为虚函数即可。这称作“地址晚绑定”。

    2024-01-30 21:50:48