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

news2024/12/28 20:46:39

文章目录

  • 一、多继承中应用 " 抽象类 "
    • 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.coloradmin.cn/o/1181263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算器中处于不同进制时

计算器中处于不同进制时 p10x20, p00x31它俩的位置关系如下,求p1p0的值 计算器软件中, 当光标在不同的进制时,选择左移或右移,得到的结果是不一样的 因为当你处于不同的进制时&#xff0c;你移动的数字 对应的进制数就是你目前所处的进制。 就是说你在计算器中算&#xff0c;…

人大女王大学金融硕士项目:培养引领金融行业未来的的新力量

在全球化的今天&#xff0c;金融行业的发展日新月异&#xff0c;对于专业人才的需求也日益增长。在这个背景下&#xff0c;人大女王大学金融硕士项目应运而生&#xff0c;旨在培养具有全球视野、创新思维和实践能力的金融精英&#xff0c;为金融行业的未来发展注入新的活力。 …

想要搭建网站帮助中心,看这一篇指南就对了!

在现今互联网时代&#xff0c;除了让用户了解产品的功能和一些操作&#xff0c;很多企业都需要在网上进行信息的发布和产品销售等业务活动。而这就需要一个帮助中心&#xff0c;在用户遇到问题或者需要了解更多信息的时候&#xff0c;能够快速地解答他们的疑惑和提供响应的帮助…

安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…

这些面试必备的IC项目资源,你收藏了吗?(可领取)

众所周知&#xff0c;IC行业的技术和经验是敲门砖&#xff0c;也是试金石。其中&#xff0c;IC实战项目就是关键一环。 如果你是出于个人自我学习的需要。 学习完理论基础知识还有很多地方都是一知半解的&#xff0c;接受了大量的信息输入&#xff0c;一定要有输出。所以个人…

soildwork2022怎么样添加螺纹孔?

1.退出草图模式&#xff0c;点击需要添加螺纹孔的物体面&#xff0c;选中“特征”中的“异形孔向导” 2.选中“孔类型”为“直螺纹孔”&#xff0c;“标准”&#xff0c;“类型”&#xff0c;“孔规格”终止条件等。 3.设置完之后选择“位置” 4.鼠标左键在物体面上点一下&…

谭巍主任科普:单纯HPV感染,无宫颈病变,在该时间段可自行清除

在医学上&#xff0c;HPV病毒是人类乳头瘤病毒的缩写&#xff0c;它有100多个亚型&#xff0c;分为高危型和低危型。HPV病毒感染是宫颈癌、肛门癌、外阴癌、喉癌、食道癌和肺癌等多种癌症的主要诱因。而劲松HPV防治诊疗中心主任谭巍则指出其中高危型HPV病毒持续感染是宫颈癌的主…

Kepp-alive的实际运用场景(1)

kepp-alive简单介绍&#xff1a;将组件缓存&#xff0c;不更新数据&#xff0c;被kepp-alive包裹的路由的组件的钩子函数不会生效。 运用场景&#xff1a; 假设我们有这样的一个功能需要实现&#xff0c;我们从主页进入到订单列表页&#xff0c;在从订单列表页进入到订单详情页…

在接口测试中怎么处理开发是否提供接口文档的总结

最近做了好几个项目的接口自动化&#xff0c;接口测试很重要的参考依据就是接口文档&#xff0c;在自动化实施过程中碰到的接口文档也是千差万别&#xff0c;有的项目没有接口文档&#xff0c;有的项目有接口文档&#xff0c;有接口文档的项目&#xff0c;有的很完善&#xff0…

分布式任务调度(03)--中心化设计

把调度和任务执行&#xff0c;隔离成两个部分&#xff1a; 调度中心 只需要负责任务调度属性&#xff0c;触发调度命令 执行器 执行器接收调度命令&#xff0c;去执行具体的业务逻辑 两者都可以进行横向扩容。 1 MQ 调度中心依赖Quartz集群模式&#xff0c;当任务调度时&am…

一文搞懂图像RGB和YUV编码及相互转换

一文搞懂图像RGB和YUV编码及相互转换 硬件花园 • 来源:硬件花园 • 作者:硬件花园 • 2023-05-17 08:37 • 3987次阅读 1 色彩空间和色彩模型 色彩是人眼对于不同频率的光线的不同感受。色彩既是客观存在的,但又是主观感知的,所以不同人对色彩的感知会存在差异。为了规范…

[论文阅读]PV-RCNN++

PV-RCNN PV-RCNN: Point-Voxel Feature Set Abstraction With Local Vector Representation for 3D Object Detection 论文网址&#xff1a;PV-RCNN 论文代码&#xff1a;PV-RCNN 简读论文 这篇论文提出了两个用于3D物体检测的新框架PV-RCNN和PV-RCNN,主要的贡献如下: 提出P…

有电闭锁继电器 YDB-100 100V 辅助电源DC110V JOSEF约瑟 板后安装

YDB-100有电闭锁继电器 1 应用 本继电器用于发电厂和变电站内&#xff0c;用作高压母线合接地刀闸的闭锁元件&#xff0c;以防止高压母线带电时合接地刀闸。 2 主要性能 2 1采用进口集成电路和元器件构成。具有原理先进、性能稳定、可靠性高、动作值精度高、离散值小、整定范围…

ideal一键部署SpringBoot项目jar包到服务器

一 简介 我们在开发环境部署项目一般通过ideal将项目打包成jar包&#xff0c;然后连接linux服务器&#xff0c;将jar手动上传到服务中&#xff0c;重启服务。 概括的说流程是这样的: 本地打包->上传到服务器->kill掉以前的服务->重新启动jar包服务 每次总是循环这一…

暴力枚举

文章目录 循环枚举统计方形加强版烤鸡三连击升级版 子集枚举选数组合的输出 排列枚举三连击升级版全排列问题火星人 [NOIP2004 普及组] 火星人题目描述输入格式输出格式样例 #1样例输入 #1 循环枚举 统计方形加强版 题目背景 1997年普及组第一题 题目描述 有一个 n m n …

Kubernetes 准入控制

Author&#xff1a;rab 目录 前言一、限制范围二、配置案例2.1 名称空间 CPU 与内存约束2.1.1 CPU 约束2.1.2 内存约束2.1.3 默认 CPU 申请约束2.1.4 默认内存申请约束 2.2 名称空间总容量限额约束 总结 前言 LimitRange 是限制命名空间内可为每个适用的对象类别 &#xff08;…

基于51单片机的停车场管理系统仿真电路设计

**单片机设计介绍&#xff0c;基于51单片机的停车场管理系统仿真电路设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 停车场管理系统仿真电路设计介绍 停车场管理系统主要用于自动化管理和控制停车场&#xff0c;以提高停车…

Elasticsearch内存分析

文章目录 Elasticsearch JVM内存由哪些部分组成Indexing BufferNode Query CacheShard Request CacheField Data CacheSegments Cache查询 非堆内存内存压力mat分析es的jvm缓存监控 Elasticsearch JVM内存由哪些部分组成 官方建议Elasticsearch设置堆内存为32G&#xff0c;因为…

第三章:人工智能深度学习教程-人工智能与机器学习与深度学习之间的区别

人工智能基本上是通过一组规则&#xff08;算法&#xff09;将人类智能融入机器的机制。人工智能是两个词的组合&#xff1a;“人工”是指由人类或非自然物体制造的东西&#xff0c;“智能”是指相应地理解或思考的能力。另一个定义可能是“人工智能基本上是训练机器&#xff0…

Starward(米家游戏启动器)支持米哈游旗下的所有桌面端游戏

Starward应用名的由来 Starward 出自星穹铁道开服前的宣传语———愿此行&#xff0c;终抵群星 (May This Journey Lead Us Starward)&#xff0c;虽然这不是一个正确的英文单词&#xff0c;但是很适合拿来用作应用名。 Starward 是一个米家游戏启动器&#xff0c;支持米哈游旗…