C++:抽象类习题
题目内容:
求正方体、球、圆柱的表面积,抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。
输出样例如图:

代码如下:
#include <iostream>
#include <cmath>
using namespace std;class Container
{
protected:double radius;
public:Container(double r) : radius(r) {}virtual double area() = 0;
};class Square : public Container
{
public:Square(double r) : Container(r) {}double area(){return 6 * radius * radius;}
};class Ball : public Container
{
public:Ball(double r) : Container(r) {}double area(){return 4 * 3.14 * radius * radius;}
};class Cylinder : public Container
{
private:double height;
public:Cylinder(double r, double h) : Container(r), height(h) {}double area(){return 2 * 3.14 * radius * (radius + height);}
};int main()
{Square cube(3.0);Ball sphere(4.0);Cylinder cylinder(5.0, 6.0);cout << "正方体面积为: " << cube.area() << endl;cout << "球面积为: " << sphere.area() << endl;cout << "圆柱体面积为: " << cylinder.area() << endl;return 0;
}
这段 C++ 代码定义了一个抽象基类Container,以及它的三个派生类Square(正方体)、Ball(球)和Cylinder(圆柱体),用于计算这三种几何体的表面积。最后在main函数中创建了这三种几何体的对象,并输出它们的表面积。以下是对代码的详细解释:
1. 抽象基类Container的定义
protected: double radius;:定义一个受保护的成员变量radius,用于存储几何体的相关半径信息。受保护的成员变量可以在派生类中访问。Container(double r) : radius(r) {}:构造函数,用于初始化radius成员变量。virtual double area() = 0;:纯虚函数,用于计算几何体的表面积。由于它是纯虚函数,所以Container类是抽象类,不能实例化对象。派生类必须实现这个函数。2. 派生类Square的定义
class Square : public Container:Square类继承自Container类,使用public继承方式,意味着基类的public和protected成员在派生类中保持原有的访问权限。Square(double r) : Container(r) {}:构造函数,调用基类的构造函数来初始化radius成员变量。double area():实现基类的纯虚函数area(),用于计算正方体的表面积。3. 派生类Ball的定义
class Ball : public Container:Ball类继承自Container类。Ball(double r) : Container(r) {}:构造函数,调用基类的构造函数来初始化radius成员变量。double area():实现基类的纯虚函数area(),用于计算球的表面积。4. 派生类Cylinder的 定义
class Cylinder : public Container:Cylinder类继承自Container类。private: double height;:定义一个私有成员变量height,用于存储圆柱体的高度。Cylinder(double r, double h) : Container(r), height(h) {}:构造函数,调用基类的构造函数来初始化radius成员变量,并初始化height成员变量。double area():实现基类的纯虚函数area(),用于计算圆柱体的表面积。5. 主函数
- 创建
Square、Ball和Cylinder类的对象,并分别初始化它们的半径和高度。- 调用每个对象的
area()函数计算表面积,并使用cout输出结果。
觉得有帮助就给博主点个关注叭~~
有问题的可以私信或者在评论区一起交流
友友们一起加油叭QAQ
相关文章:
C++:抽象类习题
题目内容: 求正方体、球、圆柱的表面积,抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出…...
C++ 泛型编程指南02 (模板参数的类型推导)
文章目录 一 深入了解C中的函数模板类型推断什么是类型推断?使用Boost TypeIndex库进行类型推断分析示例代码关键点解析 2. 理解函数模板类型推断2.1 指针或引用类型2.1.1 忽略引用2.1.2 保持const属性2.1.3 处理指针类型 2.2 万能引用类型2.3 传值方式2.4 传值方式…...
音视频入门基础:RTP专题(5)——FFmpeg源码中,解析SDP的实现
一、引言 FFmpeg源码中通过ff_sdp_parse函数解析SDP。该函数定义在libavformat/rtsp.c中: int ff_sdp_parse(AVFormatContext *s, const char *content) {const char *p;int letter, i;char buf[SDP_MAX_SIZE], *q;SDPParseState sdp_parse_state { { 0 } }, *s1…...
计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)
电子邮件系统: SMTP协议 基本概念 工作原理 连接建立: 命令交互 客户端发送命令: 服务器响应: 邮件传输: 连接关闭: 主要命令 邮件发送流程 SMTP的缺点: MIME: POP3协议 基本概念…...
【视频+图文详解】HTML基础3-html常用标签
图文教程 html常用标签 常用标签 1. 文档结构 <!DOCTYPE html>:声明HTML文档类型。<html>:定义HTML文档的根元素。<head>:定义文档头部,包含元数据。<title>:设置网页标题,浏览…...
FreeRTOS学习 --- 消息队列
队列简介 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递) 全局变量的弊端:数据无保护,导致数据不安全,当多个任务同时对该变量操作时,数据易受损 使用队列的情况如下:…...
PHP If...Else 语句详解
PHP If...Else 语句详解 引言 在PHP编程中,if...else语句是流程控制的重要组成部分,它允许程序根据条件判断执行不同的代码块。本文将详细解析PHP中的if...else语句,包括其基本用法、高级技巧以及注意事项。 一、基本用法 if...else语句的…...
pytorch使用SVM实现文本分类
人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim import jieba import numpy as np from sklearn.model_selection import train_test_split from sklearn.feature_extract…...
安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可在代码地址查看) 1.熟悉内容提供者(Content Provider)的概念和作用。 2.掌握内容提供者的创建和使用方法。 4.掌握内容URI的结构和用途。 二、实验条件 1.熟悉内容提供者的工作原理。 2.掌握内容提供者访问其…...
【Qt】常用的容器
Qt提供了多个基于模板的容器类,这些容器类可用于存储指定类型的数据项。例如常用的字符串列表类 QStringList 可用来操作一个 QList<QString>列表。 Qt的容器类比标准模板库(standard template library,STL)中的容器类更轻巧、使用更安全且更易于使…...
基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…...
分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置
文章目录 一. Seata简介二. 官方文档三. Seata分布式事务代码实现0. 环境简介1. 添加undo_log表2. 添加依赖3. 添加配置4. 开启Seata事务管理5. 启动演示 四. Seata Server配置Nacos1. 修改配置类型2. 创建Nacos配置 五. Seata Client配置Nacos1. 增加Seata关联Nacos的配置2. 在…...
JavaScript常用的内置构造函数
JavaScript作为一种广泛应用的编程语言,提供了丰富的内置构造函数,帮助开发者处理不同类型的数据和操作。这些内置构造函数在创建和操作对象时非常有用。本文将详细介绍JavaScript中常用的内置构造函数及其用途。 常用内置构造函数概述 1. Object Obj…...
25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表
目录 240. 搜索二维矩阵 II题目描述题解 148. 排序链表题目描述题解 240. 搜索二维矩阵 II 点此跳转题目链接 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到…...
MQTT知识
MQTT协议 MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、…...
【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…...
新一代搜索引擎,是 ES 的15倍?
Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…...
使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱
在开发 React Native 应用时,我们经常需要管理全局状态,比如用户信息、主题设置、网络状态等。而对于某些临时状态,例如 数据同步进行中的状态 (isSyncing),我们应该选择什么方式来管理它? 在项目开发过程中ÿ…...
PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统
基于YOLOv8深度学习的学生课堂行为检测识别系统,其能识别三种学生课堂行为:names: [举手, 读书, 写字] 具体图片见如下: 第一步:YOLOv8介绍 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本…...
word2vec 实战应用介绍
Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…...
手把手教你用Python脚本给飞书机器人“喂”数据:Gerrit事件通知实战
Python自动化实战:用飞书机器人构建Gerrit事件通知系统 每当团队协作开发时,代码审查状态的实时同步总是让人头疼。想象一下:你刚提交的代码被同事点赞,或是某个关键补丁集终于通过审核——这些重要时刻如果能在飞书群里即时提醒&…...
软电路入门:用导电缝纫线与LED制作可穿戴发光作品
1. 项目概述:当缝纫遇见电路 几年前,我第一次把一颗会发光的LED缝到帆布包上时,那种感觉非常奇妙。它不再是冰冷的电路板,而是布料纹理的一部分,随着针脚的走向亮起柔和的光。这就是软电路,或者说电子纺织品…...
YouTube 视频翻译中文:基于 Whisper + FFmpeg 的自动化流水线实战
一、背景 YouTube 视频翻译中文,本质上是将外语视频通过语音识别(ASR)、文本翻译(NMT)、语音合成(TTS)三个环节处理后,重新合成为中文版本。每一个环节都有成熟的开源工具链支持&am…...
Nodejs服务端如何配置Taotoken的OpenAI兼容SDK
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Nodejs服务端如何配置Taotoken的OpenAI兼容SDK 对于使用Node.js构建服务端应用的开发者来说,集成大模型能力正变得日益…...
FPGA异构计算与模块化SoM:赋能边缘智能与工业应用实战
1. 项目概述:一次行业深度交流的契机最近,我作为Enclustra团队的一员,有幸受邀参加了今年的嵌入式计算大会。这不仅仅是一次简单的行业聚会,更是一个观察技术风向、碰撞思想火花、探寻合作机会的绝佳窗口。对于所有深耕于嵌入式系…...
用普通光耦TLP521-2实现宽范围线性隔离?一个低成本替代线性光耦的电路设计与实测
用普通光耦TLP521-2实现宽范围线性隔离的工程实践 在工业传感器接口和模拟信号采集领域,信号隔离是确保系统稳定性和安全性的关键技术。传统专用线性光耦(如LOC系列)虽性能优异,但高昂的成本和有限的线性输出范围(通常…...
免ROOT实现安卓摄像头HOOK:探索微信QQ等主流App虚拟视频替换方案
1. 免ROOT实现安卓摄像头HOOK的核心原理 安卓系统的摄像头调用流程其实就像是一个快递配送系统。当你在微信里点击视频通话按钮时,应用程序会向系统发出一个"取快递"请求(Camera.open()),系统会分配一个快递员ÿ…...
告别Keil!用STM32CubeIDE给STM32F103C8T6做双路ADC采样,DMA+中断实战避坑
从Keil到STM32CubeIDE:双路ADC采样与DMA中断实战全解析 当传统嵌入式开发遇上现代化工具链,迁移过程中的技术决策往往比想象中更复杂。对于长期使用Keil MDK的开发者而言,转向STM32CubeIDE不仅意味着开发环境的改变,更涉及从寄存器…...
CherryUSB嵌入式USB协议栈终极指南:从入门到精通
CherryUSB嵌入式USB协议栈终极指南:从入门到精通 【免费下载链接】CherryUSB CherryUSB is a tiny and beautiful, high performance and portable USB host and device stack for embedded system with USB IP 项目地址: https://gitcode.com/gh_mirrors/ch/Cher…...
