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

C++语法规则4(C++面向对象)

接口(抽象类)

接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的。

设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。

抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。

因此,如果一个 ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。可用于实例化对象的类被称为具体类。

根据概念我们来写个实例来说明抽象类。

还是以狗类为说明,例程与 2.2.4 小节类似,只是 Aninmal 类的 run()方法定义为纯虚函数,纯虚函数不用实现,由派生类 Dog 和 Cat 类实现重写即可。

新建一个目录 11_abstract_class,编辑一个 11_abstract_class.cpp 内容如下。

1 #include <iostream> 2 3 using namespace std; 4 5 /* 定义一个动物类 */ 6 class Animal 7 { 8 public: 9 virtual void run() = 0; 10 }; 11 12 /* 定义一个狗类,并继承动物类 */ 13 class Dog : public Animal 14 { 15 public: 16 void run() { 17 cout<<"Dog 的 run()方法"<<endl; 18 } 19 20 }; 21 22 /* 定义一个猫类,并继承动物类 */ 
23 class Cat : public Animal 24 { 25 public: 26 void run() { 27 cout<<"Cat 的 run()方法"<<endl; 28 } 29 30 }; 31 32 int main() 33 { 34 /* 实例化 dog 对象 */ 35 Dog dog; 36 37 /* 实例化 cat 对象 */ 38 Cat cat; 39 40 /* dog 调用 run()方法 */ 41 dog.run(); 42 43 /* cat 调用 run()方法 */ 44 cat.run(); 45 46 return 0; 47 } 

执行下面指令进行程序编译。

g++ 11_abstract_class.cpp -o 11_abstract_class 

程序运行的结果如下。
在这里插入图片描述

虽然结果和例程与 2.2.4 小节一样,但是却表现了两种不同的思想。学 C++重要的是思想,当我们对这种思想有一种的了解后,不管是 Qt 或者其他 C++程序,我们都能快速学习和了解。

C++的内容就到此结束了。在这个 C++基础中,我们的例子非常简单,也十分之易懂,重要的是理解概念,许多 C++的课程都是以 C++的功能甚至是很复杂的算法作讲解,内容复杂且多。

只要我们理解好上面的 C++的基础,对学习 C++有很大的帮助,不要求对 C++有很深的理解,至少在我们后面学习 Qt 时已经大概了解 Qt 中的 C++语法。

相关文章:

C++语法规则4(C++面向对象)

接口&#xff08;抽象类&#xff09; 接口描述了类的行为和功能&#xff0c;而不需要完成类的特定实现。C 接口是使用抽象类来实现的&#xff0c;抽象类与数据抽象互不混淆&#xff0c;数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚…...

【Spring 深入学习】AOP的前世今生之后续

AOP的前世今生之后续 1. 概述 上篇文章【Spring 深入学习】AOP的前世今生之代理模式我们讲述了代理模式。而我们今天的主人公AOP就是基于代理模式实现的&#xff0c;所以我们今天会简单学习下AOP 2. 什么是AOP 是面向切面编程&#xff0c;一般可以帮助我们在不修改现有代码的情…...

软考高项——配置管理

配置管理配置管理配置管理6个主要活动配置项配置基线配置项的状态配置库配置库权限管理配置审计配置管理 配置管理的总线索包括&#xff1a; 1&#xff09;配置管理6个主要活动 2&#xff09;配置项 3&#xff09;配置基线 4&#xff09;配置项的状态 5&#xff09;配置库 6&a…...

网站SEO优化,网站TDK三大标签SEO优化,LOGO SEO优化

SEO&#xff08;Search Engine Optimization&#xff09;汉译为搜索引擎优化&#xff0c;是一种利用搜索引擎的规则提高网站在有关搜索 引擎内自然排名的方式。 SEO 的目的是对网站进行深度的优化&#xff0c;从而帮助网站获取免费的流量&#xff0c;进而在搜索引擎上提升网站的…...

select查询语句

worker表的字段有id, d_id, name, sex, birthday, salary, address 编号,部门号,姓名,性别,出生日期,工资,家庭住址 department表的字段有d_id, d_name, function, address 部门号,部门名,部门职能,部门位置 (1)查询worker表的所有记录(用*表示)。 select * fro…...

没有对象感,沟通太费劲

沟通中最重要的感觉&#xff1a;对象感&#xff01; 要沟通的是谁&#xff1f;以啥方式最好&#xff1f; 趣讲大白话&#xff1a;蹲着跟小孩说话 【趣讲信息科技100期】 ******************************* 对象感是沟通者必须训练和提升的 是换位思考的一种能力 以便跟沟通对象进…...

智能优化算法之遗传算法

该算法已被很多篇文章讲解&#xff0c;本文将会去除很多较简单的内容&#xff0c;挑选认为重点核心部分进行讲述&#xff0c;内容中有属于信息的收集整理部分&#xff0c;也有属于自己理解的部分。 1、遗传算法概述 遗传算法是一类借鉴生物界的进化规律演化而来的随机化搜索方…...

【rabbitmq 实现延迟消息-插件版本安装(docker环境)】

一&#xff1a;插件简介 在rabbitmq 3.5.7及以上的版本提供了一个插件&#xff08;rabbitmq-delayed-message-exchange&#xff09;来实现延迟队列功能。同时插件依赖Erlang/OPT 18.0及以上。 二&#xff1a;插件安装 1&#xff1a;选择适合自己安装mq 版本的插件&#xff1…...

【大数据】HDFS管理员 HaAdmin 集群高可用命令详细使用说明

高可用HaAdmin使用概览使用说明checkHealth查看NameNode的状态所有NN的服务状态查询指定NN的服务状态failovertransitionToActive概览 HDFS高可用特性解决了集群单点故障问题&#xff0c;通过提供了两个冗余的NameNode以主动或被动的方式用于热备&#xff0c;使得集群既可以从…...

京区航天研究所 哪些比较好的研究所?

第一梯队&#xff1a;一院一部、战术武器部、10所、12所、研发部、空天部&#xff0c;五院501所&#xff08;总体设计部&#xff09;、502所、通导部、遥感部、钱室&#xff08;所人均年薪35w-50w级别&#xff09; 第二梯队&#xff1a;一院14所、15所&#xff0c;二院未来实验…...

Nacos配置拉取及配置动态刷新原理【源码阅读】

Nacos配置拉取及配置刷新原理 一、初始化时获取配置文件 背景 SpringCloud项目中SpringBoot在启动阶段除了会创建SpringBoot容器&#xff0c;还会通过bootstrap.yml构建一个SpringCloud容器&#xff0c;之后会在准备上下文阶段通过SPI加载实现类后&#xff0c;会进行配置合并…...

第十届省赛——9等差数列(集合做法)

题目&#xff1a;试题 I: 等差数列时间限制: 1.0s 内存限制: 512.0MB 本题总分&#xff1a;25 分【问题描述】数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列&#xff0c;只记得其中 N 个整数。现在给出这 N 个整数&#xff0c;小明想知道包含这…...

《数据分析-JiMuReport03》JiMuReport报表设计入门介绍-新建报表

报表设计 1 新建报表 1.1 创建新的数据报表 以数据报表为例&#xff0c;简单介绍创建报表的过程 1.2 进入报表设计页面 如下图可见&#xff0c;主要分为四个模块&#xff1a; 模块一(左) 数据集管理报表信息数据字典 模块二(右) 这部分是对数据报表的进一步优化 模块三(上…...

从功能测试进阶自动化测试,爆肝7天整理出这一份超全学习指南【附网盘资源】

因为我最近在分享自动化测试技术&#xff0c;经常被问到&#xff1a;功能测试想转自动化&#xff0c;请问应该怎么入手&#xff1f;有没有好的资源推荐&#xff1f;那么&#xff0c;接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。&#xff08;学习路线和网盘…...

CNN神经网络——手写体识别

目录 Load The Datesets Defining,Training,Measuring CNN Algorithm Datasets GRAET HONOR TO SHARE MY KNOWLEDGE WITH YOU This paper is going to show how to use keras to relize a CNN model for digits classfication Load The Datesets The datasets files are …...

python调试模块ipdb

1. 调试python ipdb是用来python中用以交互式debug的模块&#xff0c;可以直接利用pip安装; 其功能类似于pycharm中 python控制台&#xff0c; 而使用ipdb 的优点&#xff0c;便是直接在代码中调试&#xff0c; 避免了在python控制台&#xff0c;或者重新设置一些简单变量。…...

【数据库】聊聊MySQL的日志,binlog、undo log、redo log

日志 在数据库中&#xff0c;如何保证数据的回滚&#xff0c;以及数据同步&#xff0c;系统宕机后可以恢复到原来的状态&#xff0c;其实就是依靠日志。 其中bin log是Server层特有的&#xff0c;redo log是Innodb存储引擎特有的。 bin log 是逻辑日志&#xff0c;主要记录这条…...

aws dynamodb java低等级api和高级客户端api的使用

参考资料 https://docs.amazonaws.cn/zh_cn/sdk-for-java/latest/developer-guide/setup-project-maven.html 初始化环境 创建maven项目 mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate \-DarchetypeArtifactId"maven-archetype-quickstart&quo…...

Kafka中那些巧妙的设计

一、kafka的架构 Kafka是一个分布式、多分区、基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;具有可扩展和高吞吐率的特点。 kafka中大致包含以下部分&#xff1a; Producer&#xff1a; 消息生产者&#xff0c;向 Kafka Broker 发消息的客户…...

《JavaEE》进程和线程的区别和联系

&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;JavaEE 目录 进程是什么&#xff1f; 线程是什么&#xff1f; 进程和线程之间的联系~ ps1&#xff1a;假设我们当前的大兴国际机场有一条登机口可以登入飞机 ps2&#xff1a;我们为…...

OpenClaw+Qwen3.5-9B组合创新:AI绘画描述词自动优化与批量生成

OpenClawQwen3.5-9B组合创新&#xff1a;AI绘画描述词自动优化与批量生成 1. 为什么需要AI绘画描述词优化 去年我开始尝试用Stable Diffusion进行艺术创作时&#xff0c;最头疼的就是提示词&#xff08;prompt&#xff09;的编写。每次都要反复调整形容词、风格修饰词、艺术家…...

沉浸推理的线上聚会:线上剧本杀APP的功能设计

当好友散落在不同的城市&#xff0c;想要围坐一桌来一场酣畅淋漓的推理游戏似乎成了奢望。线上剧本杀APP的出现&#xff0c;打破了空间的限制&#xff0c;让热爱推理与角色扮演的人们能够在线上相聚&#xff0c;共同沉浸在一个个精心编织的故事里。以下从功能体验的角度&#x…...

关于前端获取DOM节点的兼容IE6的代码封装

返回所有子元素节点的代码封装// 封装一个函数&#xff0c;这个函数可以返回元素的所有子元素节点(兼容到IE6)&#xff0c;类似children的功能function getChildren(node){// 结果数组var children [];// 遍历node这个节点的所有子节点&#xff0c;判断每一个子节点的nodeType…...

JSMN嵌入式JSON解析器:零拷贝、无内存分配的轻量实现

1. JSMN&#xff1a;面向嵌入式系统的极简JSON解析器深度解析 1.1 设计哲学与工程定位 JSMN&#xff08;JSON Parser for Microcontrollers&#xff09;并非通用JSON库的轻量裁剪版&#xff0c;而是在资源受限场景下重新定义“解析”边界的产物。其核心设计信条是&#xff1a;…...

神经信号干扰器:让脑机监控读取错误数据

在软件测试领域&#xff0c;精准的数据采集与分析是保障产品质量的核心。随着脑机接口&#xff08;BCI&#xff09;技术在测试工具中的广泛应用&#xff0c;神经信号监控已成为提升缺陷检出率和决策效率的关键手段。然而&#xff0c;神经信号干扰器的出现&#xff0c;正悄然威胁…...

光污染防御:用频闪灯破坏摄像头追踪

在数字安全日益严峻的今天&#xff0c;软件测试从业者作为质量保障的守门人&#xff0c;不仅需关注代码漏洞&#xff0c;还必须深入理解物理层面的安全威胁。摄像头追踪已成为隐私侵犯的高发领域&#xff0c;而光污染防御技术——尤其是利用频闪灯破坏摄像头成像——正从被动检…...

VBA Collection对象实战:从Excel数据处理到自动化报表的5个高效技巧

VBA Collection对象实战&#xff1a;从Excel数据处理到自动化报表的5个高效技巧 在Excel自动化领域&#xff0c;VBA的Collection对象就像瑞士军刀中的主刀——看似简单却功能强大。不同于数组的刻板和字典的复杂&#xff0c;Collection以轻量级特性成为处理动态数据的理想选择。…...

叠层母排市场洞察:至2032年将攀升至近101.7亿元

据恒州诚思调研统计&#xff0c;2025年全球叠层母排收入规模约34.63亿元&#xff0c;至2032年将攀升至近101.7亿元&#xff0c;2026-2032年复合增长率&#xff08;CAGR&#xff09;达14.2%。这一增长受新能源汽车电驱系统、风光储变流器等电力电子领域需求爆发驱动&#xff0c;…...

《信息系统项目管理师教程(第4版)》——成本管理知识要点

成本管理知识要点一、成本管理基础概念 项目成本管理是为确保项目在批准预算内完成&#xff0c;对成本进行规划、估算、预算、融资、筹资、管理和控制的过程。其核心目标是平衡成本与价值&#xff0c;既关注项目活动所需资源的成本&#xff0c;也考虑项目决策对产品/服务后续使…...

零代码制作专业播客:SoulX-Podcast让AI语音合成触手可及

零代码制作专业播客&#xff1a;SoulX-Podcast让AI语音合成触手可及 【免费下载链接】SoulX-Podcast SoulX-Podcast is an inference codebase by the Soul AI team for generating high-fidelity podcasts from text. 项目地址: https://gitcode.com/gh_mirrors/so/SoulX-Po…...