【C++】多态 ⑬ ( 多继承中应用 “ 抽象类 “ | 接口和抽象类 | C++ 语言中接口实现 | 只定义 纯虚函数 的 抽象类作接口 | )

文章目录

  • 一、多继承中应用 " 抽象类 "
    • 1、接口和抽象类
    • 2、编程语言对接口和多继承的支持
    • 3、C++ 语言中接口实现
  • 二、代码示例 - 多继承中应用 " 抽象类 "





一、多继承中应用 " 抽象类 "




1、接口和抽象类


接口 Interface 和 抽象类 AbstractClass 都是 面向对象编程 的重要概念 , 借助它们可以定义一个模板 , 令其他类 实现接口 或 继承抽象类 模板 , 可实现多态效果 , 这是面向对象最重要的操作 ;

  • Java 语言 中 , 有 明确的 接口 Interface 和 抽象类 AbstractClass 概念 ;

  • C++ 语言 中 , 没有 接口 Interface 概念 , 只有 抽象类 AbstractClass 概念 ;


2、编程语言对接口和多继承的支持


大部分 面向对象语言 不支持 多继承 , 即使是 C++ 语言 支持 多继承 , 也不推荐用户使用多继承 , 因为多继承会造成二义性等一系列问题 , 导致程序难以维护 ;

大部分 面向对象语言 支持 接口概念 , 一个类可以继承多个接口 ;


3、C++ 语言中接口实现


C++ 语言中 , 没有接口概念 , 这里使用 " 纯虚函数 " 实现接口 ;


接口类特点 : 接口类中 只有 函数原型 , 没有成员变量 , 函数原型 指的是 函数只有 返回值 函数名 和 参数列表 , 没有函数体 ;

C++ 中的 接口类 有如下要求 :

  • 类中只能定义纯虚函数 , 该类是一个抽象类 ;
  • 类中不能定义除纯虚函数之外的其它成员 , 如 普通函数 , 成员变量 ;

下面的类就是 只 定义了 纯虚函数 的 抽象类 , 可以当做接口使用 ;

// 定义了纯虚函数的类就是抽象类
// 也可以用作接口
class Interface {  
public:  // 纯虚函数  virtual void pureVirtualFunction() = 0;
};




二、代码示例 - 多继承中应用 " 抽象类 "



在 C++ 中 , 使用只定义了 纯虚函数 的 抽象类 , 作为接口 ;

借助 C++ 多继承的特性 , 继承多个 " 只定义了 纯虚函数 的 抽象类 " , 也就是接口 ;


代码示例 :

#include "iostream"
using namespace std;// 定义了纯虚函数的类就是抽象类
// 这里使用抽象类作为接口使用
class Interface1 {
public:// 纯虚函数  virtual int add(int a, int b) = 0;
};// 定义了纯虚函数的类就是抽象类
// 这里使用抽象类作为接口使用
class Interface2 {
public:// 纯虚函数  virtual int minus(int a, int b) = 0;
};// 派生类继承抽象类
class DerivedClass : public Interface1, public Interface2 
{
public:// 实现纯虚函数int add(int a, int b) override {int ret = a + b;// 函数体 cout << "add 计算结果 : " << ret << endl;return ret;}// 实现纯虚函数int minus(int a, int b) override {int ret = a - b;// 函数体 cout << "minus 计算结果 : " << ret << endl;return ret;}
};int main() {// 创建子类对象 , 通过子类调用接口方法DerivedClass d;d.add(1, 2);d.minus(1, 2);// 将子类对象赋值给接口指针 , 通过接口指针调用接口方法Interface1* i1 = &d;i1->add(1, 2);// 将子类对象赋值给接口指针 , 通过接口指针调用接口方法Interface2* i2 = &d;i2->minus(1, 2);// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}

执行结果 :
add 计算结果 : 3
minus 计算结果 : -1
add 计算结果 : 3
minus 计算结果 : -1
Press any key to continue . . .

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/163896.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【owt】p2p client mfc 工程梳理

1年前构建的,已经搞不清楚了。所以梳理下,争取能用较新的webrtc版本做测试。最早肯定用这个测试跑通过 【owt】p2p Signaling Server 运行、与OWT-P2P-MFC 交互过程及信令分析官方的mfc客户端 估计是构造了多个不同的webrc版本的客户端

NtripShare Caster高精度定位CORS服务软件

NtripShare CORS是NtripShare GNSS系列软件中最早的软件系统&#xff0c;也是NtripShare名称的起源。 所谓GNSS CORS服务系统一般构成&#xff1a; 1&#xff09;基准站网&#xff1a;由若干个分布合理的GNSS 基准站组成&#xff1b; 2&#xff09;数据传输系统&#xff1a;…

服务号怎么改成订阅号

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;在推送频率上来看&#xff0c;服务号每月能推送四条消息&#xff0c;而订阅号可以每天&#xff08;24小时&#xff09;推送一条消息。如果企业开通公众号的目的是提供服务&#xff0c;例如售前资讯…

计算机基础知识45

JS的RegExp对象(正则) text: 正则校验数据 # T/F match: 匹配 # (3) [s, s, s] //定义 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; //正则校验数据 var res reg1.test(jason666); console.log(res…

如何对非线性【SVM】进行三维可视化

首先导入相应的模块&#xff0c; from sklearn.datasets import make_blobs from sklearn.svm import SVC import matplotlib.pyplot as plt import numpy as np 我们使用make_circles()函数创建散点图&#xff0c;并将散点图中的点的横纵坐标赋值给x,y&#xff0c;其中x是特…

【Mac开发环境搭建】安装HomeBrew、HomeBrew安装Docker、Docker安装Mysql5.7和8

文章目录 HomeBrew安装相关命令安装包卸载包查询可用的包更新所有包更新指定包查看已经安装的包查看包的信息清理包查看brew的版本更新brew获取brew的帮助信息 Brew安装DockerDocker常用命令镜像相关查看已经拉取的所有镜像删除镜像 容器相关停止运行容器启动容器重启容器删除容…

vcenter跨版本升级

vcenter跨版本升级&#xff08;比如从6.7升级到7.0&#xff09;1.如果您有VCHA&#xff0c;需要关闭移除 vCenter HA 配置 2. 一定要先做好VC的备份 将VC做一个内存快照以便备份 3.下载好后&#xff0c;在电脑上解压镜像ISO&#xff0c;进入这个文件夹运行程序&#xff0c;并…

台式电脑怎么无损备份迁移系统到新硬盘(使用傲梅,免费的就可以)

文章目录 前言一、想要将源硬盘上的系统原封不动地迁移到新硬盘上二、准备工作2.具体步骤 总结 前言 半路接手公司一台台式电脑&#xff0c;C盘&#xff08;120g&#xff09;爆红&#xff0c;仅剩几个G&#xff0c;优化了几次&#xff0c;无果后。准备换一个大一点的增到500g。…

python 之异常处理结构

文章目录 常见的异常处理表现形式1. SyntaxError2. NameError3. TypeError4. IndexError5. KeyError6. ZeroDivisionError7. FileNotFoundErrortry……except …… 结构1. try 块2. except 块示例&#xff1a;多个except块try……except ……else 结构结构说明&#xff1a;示例…

MATLAB画图由于线段太多导致导出图片模糊的解决办法

Matlab画图如果figure内的线条过多&#xff0c;或者散点过多&#xff0c;导出的图片会模糊&#xff0c;解决方案 解决方法就在于figure的导出设置中。 在设置的渲染选项中&#xff0c;渲染器有两个&#xff0c;分别为painters和OpenGL&#xff0c;分别为矢量格式输出和位图输出…

Ubuntu网络IP地址一直显示127.0.0.1

问题描述&#xff1a; 终端输入ip a显示127.0.0.1&#xff0c;原来类似192.168.231.1的地址不见了。 ip a 点击网络配置&#xff08;ubuntu桌面版&#xff09;&#xff0c;发现无线网络模块看不见了 正常情况应该有wired 模块&#xff0c;就是下面标红的 解决方案&#xff1a…

【PC电脑windows环境下-[jetson-orin-NX]Linux环境下-下载工具esptool工具使用-相关细节-简单样例-实际操作】

【PC电脑windows环境下-[jetson-orin-NX]Linux环境下-下载工具esptool工具使用-相关细节-简单样例-实际操作】 1、概述2、实验环境3、 物品说明4-2、自我总结5、本次实验说明1、准备样例2、设置芯片3、编译4、下载5、验证 &#xff08;1&#xff09;windows环境下进行烧写1、下…