当前位置: 首页 > news >正文

C++ 接口的实现,及作用通俗理解方式

接口

C++中的接口,一般就是指抽象类,是一种用来描述类对外提供的操作、方法或功能的集合——注意,一般只是描述(声明),而不对这些方法或功能进行定义实现,通常在类的继承或多态中作为基类使用,这种用法也与其特性有关。值得一提的是,接口中的方法或功能一般需要在派生类中进行重写定义实现。

抽象类

C++的接口通常是使用抽象类来实现的,而什么是抽象类呢?

抽象类一般指的是包含一个或多个纯虚函数的类。

至于纯虚函数的概念和实现方法,可参考上一章节的内容:C++ 纯虚函数定义语法,及作用。

重点提示:因为抽象类无法被实例化,而且一般作为基类使用,所以通常不需要定义构造函数(实际上,基类的构造函数也不会被派生类所继承)。

接口的作用

C++的接口最主要的作用(个人理解)就是作为基类使用。想象一下,如果某个C++的项目中已经声明好了很多很有用的接口,那么很多程序就可以使用接口即插即用,就比如计算机上的很多接口(这里单单举一个USB的接口作为例子),当我们需要使用鼠标的时候,可以通过将鼠标连接到USB接口即可,如果需要外接的音响,也可以通过USB接口来连接,这同一个接口却实现了不同的功能,因为鼠标和音响的实现的功能不同——就好比派生类对基类的方法(成员函数)的定义不同,因此实现的功能不同。

接口实现的实例代码

下面实例中,定义了一个抽象类作为接口,并在其不同的派生类中进行定义,得到不同的功能:

virtual returnType funcName( args ) = 0

纯虚函数实例代码

#include <iostream>
using namespace std;class Fruit{public:// 纯虚函数virtual void setData(string n, int p) = 0;// 普通成员函数,用于访问protected中的变量void getData(){cout << name <<"价格:" << price << endl;}protected:string name;int price;
};class Apple:public Fruit{public:// 定义继承自Fruit的纯虚函数,并显式制定重写overridevoid setData(string n="苹果", int p=6) override {name = n;price = p;}};class Banana:public Fruit{public:void setData(string n="香蕉", int p=3) override{name = n;price = p;}
};int main(){Apple a;a.setData();Banana b;b.setData();a.getData();b.getData();return 0;
}

代码编译运行后,得到输出:

苹果价格:6
香蕉价格:3

原文:C++ 接口的实现,及作用通俗理解方式

免责声明:内容仅供参考,不保证正确性。

相关文章:

C++ 接口的实现,及作用通俗理解方式

接口 C中的接口&#xff0c;一般就是指抽象类&#xff0c;是一种用来描述类对外提供的操作、方法或功能的集合——注意&#xff0c;一般只是描述&#xff08;声明&#xff09;&#xff0c;而不对这些方法或功能进行定义实现&#xff0c;通常在类的继承或多态中作为基类使用&am…...

TypeScript:typescript的安装与运行

TypeScript&#xff1a;typescript的安装与运行 1 安装方式 -g全局安装TypeScript&#xff1a; npm install -g typescript2 运行方式 &#xff08;1&#xff09;ts编译成js&#xff0c;使用node命令运行js文件 打开vscode&#xff0c;进入ts文件所在目录下并打开终端term…...

【代码随想录Day27】

Day 27 回溯算法03 今日任务 组合总和 40.组合总和II131.分割回文串 代码实现 组合总和&#xff0c;直接套模板可解 public List<List<Integer>> combinationSum(int[] candidates, int target) {backtracking(candidates, target, 0);return result;}void back…...

【一】【单片机】有关LED的实验

点亮一个LED灯 根据LED模块原理图&#xff0c;我们可以知道&#xff0c;通过控制P20、P21...P27这八个位置的高低电平&#xff0c;可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平&#xff0c;如果P20接的是低电平&#xff0c;那么D1就可以亮。如果P20接的是高电平&#xff0c;…...

面试算法-49-缺失的第一个正数

题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,2] 中的数字都…...

论文笔记:液体管道泄漏综合检测与定位模型

0 简介 An integrated detection and location model for leakages in liquid pipelines 1 摘要 许多液体&#xff0c;如水和油&#xff0c;都是通过管道运输的&#xff0c;在管道中可能发生泄漏&#xff0c;造成能源浪费、环境污染和对人类健康的威胁。本文描述了一种集成的…...

抖音视频批量提取软件|无水印视频下载

抖音视频批量提取软件&#xff0c;让您高效下载精彩内容&#xff01; 您是否经常需要下载抖音视频&#xff0c;但传统的下载方式繁琐且低效&#xff1f;别担心&#xff0c;我们为您提供了一款强大而智能的抖音视频批量提取软件&#xff0c;让您轻松实现下载无水印的精彩内容&am…...

Linux docker1--环境及docker安装

一、基础环境要求 Docker分为ce版本&#xff08;免费&#xff0c;试用7个月&#xff09;和ee版本&#xff08;收费&#xff09;。 最低配置要求&#xff1a;64位操作系统&#xff0c;centOS 7及以上&#xff0c;内核版本不低于3.10 二、部署docker 1、查看服务的基础环境是否满…...

uniapp使用uview - DatetimePicker 时间选择器 /时间戳转化

uniapp使用uview - DatetimePicker 时间选择器 /时间戳转化时转换日期格式后页面仍显示时间戳 单元格内显示时间&#xff0c;点击可出现时间选择器切换时间 <u-cell :isLinktrue click"selectTime" title"开始时间" :value"startTime">…...

python实现websocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时数据传输&#xff0c;而不是像 HTTP 协议那样&#xff0c;每次请求都需要建立新的连接。WebSocket 协议最初是由 HTML5 定义的&#xff0c;旨在提供一种更有效的替代方案&#xff0c;…...

ElasticSearch简介及常见用法

简介 Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。 Kibana 使您能够以交互方式探索、可视化和分享对数据的见解&#xff0c;并管理和监控堆栈。 Elasticsearch 可以快速索…...

js iframe获取documen中的对象为空问题

原因其实是iframe加载是需要时间的&#xff0c;它还没加载完我就在js中直接获取对象了&#xff0c;所以获取为空 var idocument.getElementById("iframe"); i.onloadfunction(){console.log(i.contentDocument)console.log(i.contentWindow.document.getElementById…...

vue3子父组件之间的调用

子组件&#xff1a; capacityIndex.vue 父组件&#xff1a; index.vue A.子组件获取父组件属性 1.在父组件中引用子组件 import capacityIndex from "./capacityIndex"; <capacityIndex :tankInfo"tankInfo" :deviceNameInfo"deviceNameInfo…...

用 二层口 实现三层口 IP 通信的一个实现方法

我们一般用 undo portswitch 来将二层口转为三层口&#xff0c;但如果设备不支持的话&#xff0c;那么。。。 一、拓朴图&#xff1a; 二、实现方法&#xff1a; 起一个 vlan x&#xff0c;配置 vlanif地址&#xff0c;然后二层口划分到 vlan x 下&#xff0c;对端做同样的配置…...

(学习日记)2024.03.12:UCOSIII第十四节:时基列表

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…...

四.流程控制(顺序,分支,循环,嵌套)

c刚刚转过来的记得写在public static void main&#xff08;String[] args&#xff09;的花括号里 一.顺序结构 二.分支结构 if &#xff0c;switch 1.if (条件判断&#xff09; 2.if else 3.if else if else if ... else(它是一个一个否定来一个个执行判断的 4.s…...

了解常用开发模型 -- 瀑布模型、螺旋模型、增量与迭代、敏捷开发

目录 瀑布模型 开发流程 开发特征 优缺点 适用场景 螺旋模型 开发流程 开发特征 优缺点 适用场景 增量与迭代开发 什么是增量开发&#xff1f;什么是迭代开发&#xff1f; 敏捷开发 什么是敏捷开发四原则&#xff08;敏捷宣言&#xff09;&#xff1f; 什么是 s…...

使用 Vue CLI 创建一个 Vue2 项目

全局安装 Vue CLI 参考官网 Vue CLI&#xff0c;安装命令如下 npm install -g vue/cli 目前 Vue CLI 的最新版本为 v5.0.8 创建 Vue2 项目 在希望创建项目的目录下打开命令行&#xff0c;键入命令 vue create my-project 其中 my-project 更改为自己需要的项目名 随后&a…...

Linux工具 - 耀眼的git

~~~~ 前言耀眼的GitGit是什么&#xff08;本质&#xff09;Git出现的背景&#xff08;本着开源的精神&#xff09;在命令行中使用Git&#xff08;Come on 来使用Git吧&#xff09;.git文件说明新建仓库git clone 克隆云端仓库到本地git addgit commit -mgit pushgit pullgit st…...

Spring Security的开发

文章目录 1,介绍2, 核心流程3, 核心原理3.1 过滤器链机制3.2 主体3.3 认证3.4 授权3.5 流程图4, 核心对象4.1 UserDetailsService 接口4.2 PasswordEncoder 接口4.3 hasAuthority方法4.4 hasAnyAuthority方法4.5 hasRole方法4.5 hasAnyRole方法5, 核心注解5.1 @PreAuthorize5.1…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...