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

C++:虚函数与多态性习题2

题目内容:

编写程序,声明抽象基类Shape,由它派生出3个派生类:Circle、Rectangle、Triangle,用虚函数分别计算图形面积,并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。

输出样例如下如图:

代码如下:

#include <iostream>
#include <cmath>
using namespace std;class Shape
{
public:virtual double Area() = 0;virtual ~Shape() {}
};class Circle : public Shape
{
private:double radius;
public:Circle(double r) : radius(r) {}virtual double Area(){return 3.14 * radius * radius;}
};class Rectangle : public Shape
{
private:double width, height;
public:Rectangle(double w, double h) : width(w), height(h) {}virtual double Area(){return width * height;}
};class Triangle : public Shape
{
private:double base, height;
public:Triangle(double b, double h) : base(b), height(h) {}virtual double Area(){return 0.5 * base * height;}
};int main()
{Shape* shapes[3];shapes[0] = new Circle(5.0);shapes[1] = new Rectangle(4.0, 6.0);shapes[2] = new Triangle(3.0, 4.0);double totalArea = 0.0;for (int i = 0; i < 3; ++i){totalArea += shapes[i]->Area();cout << "Shape " << i + 1 << "面积为: " << shapes[i]->Area() << endl;}cout << "总面积为: " << totalArea << endl;return 0;
}

这段 C++ 代码实现了一个简单的面向对象程序,用于计算不同形状(圆形、矩形、三角形)的面积以及它们的总面积。下面将对代码进行详细解释:
1. 抽象基类Shape类的定义

  • virtual double Area() = 0;:这是一个纯虚函数,意味着Shape类是一个抽象基类,不能实例化对象。所有继承自Shape的派生类都必须实现这个Area函数,用于计算各自形状的面积。
  • virtual ~Shape() {}:虚析构函数,确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,避免内存泄漏。

2. 派生类Circle的定义

  • class Circle : public ShapeCircle类继承自Shape类,使用public继承方式,意味着Shape类的公有成员在Circle类中仍然是公有的。
  • double radius;:私有成员变量,用于存储圆的半径。
  • Circle(double r) : radius(r) {}:构造函数,用于初始化圆的半径。
  • virtual double Area():重写基类的纯虚函数Area,实现计算圆面积的功能,圆的面积公式为,这里取 3.14。

3. 派生类Recently的定义

  • class Rectangle : public ShapeRectangle类继承自Shape类。
  • double width, height;:私有成员变量,分别存储矩形的宽度和高度。
  • Rectangle(double w, double h) : width(w), height(h) {}:构造函数,用于初始化矩形的宽度和高度。
  • virtual double Area():重写基类的纯虚函数Area,实现计算矩形面积的功能。

4. 派生类Triangle的定义

  • class Triangle : public ShapeTriangle类继承自Shape类。
  • double base, height;:私有成员变量,分别存储三角形的底和高。
  • Triangle(double b, double h) : base(b), height(h) {}:构造函数,用于初始化三角形的底和高。
  • virtual double Area():重写基类的纯虚函数Area,实现计算三角形面积的功能。

5. 主函数

  • Shape* shapes[3];:定义一个基类指针数组,用于存储不同形状对象的指针。
  • shapes[0] = new Circle(5.0);shapes[1] = new Rectangle(4.0, 6.0);shapes[2] = new Triangle(3.0, 4.0);:使用new运算符动态创建CircleRectangleTriangle对象,并将它们的指针存储在shapes数组中。
  • double totalArea = 0.0;:用于存储所有形状的总面积。
  • for (int i = 0; i < 3; ++i):遍历shapes数组,调用每个形状对象的Area函数计算面积,并累加到totalArea中,同时输出每个形状的面积。
  • cout << "总面积为: " << totalArea << endl;:输出所有形状的总面积。

觉得有帮助就给博主点个关注叭~~

有问题的可以私信或者在评论区一起交流

友友们一起加油叭QAQ

相关文章:

C++:虚函数与多态性习题2

题目内容&#xff1a; 编写程序&#xff0c;声明抽象基类Shape&#xff0c;由它派生出3个派生类&#xff1a;Circle、Rectangle、Triangle&#xff0c;用虚函数分别计算图形面积&#xff0c;并求它们的和。要求用基类指针数组&#xff0c;使它每一个元素指向一个派生类对象。 …...

利用metaGPT多智能体框架实现智能体-1

1.metaGPT简介 MetaGPT 是一个基于大语言模型&#xff08;如 GPT-4&#xff09;的多智能体协作框架&#xff0c;旨在通过模拟人类团队的工作模式&#xff0c;让多个 AI 智能体分工合作&#xff0c;共同完成复杂的任务。它通过赋予不同智能体特定的角色&#xff08;如产品经理、…...

Kubernetes组成及常用命令

Pods(k8s最小操作单元)ReplicaSet & Label(k8s副本集和标签)Deployments(声明式配置)Services(服务)k8s常用命令Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化应用程序的部署、扩展和管理。自2014年发布以来,K8s迅速成为容器编排领域的行业标准,被…...

oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]

把多个查询结果上下合并, 即, 通过操作符将多个 SELECT 语句的结果集合并为一个结果集。虽然联合查询通常用于从多个表中检索数据&#xff0c;但它也可以用于从同一个表中检索不同的数据集。 联合查询: 交集,并集,差集 默认的排序规则通常是基于查询结果集中的列的自然顺序。…...

力扣第149场双周赛

文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I3440.重新安排会议得到最多空余时间II 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目…...

AI开发之 ——Anaconda 介绍

Anaconda 是什么&#xff1f; 在这里插入图片描述 一句话&#xff1a;Anaconda 是Python 库和环境便捷管理的平台。 Anaconda 是数据科学和 AI 领域的工具&#xff0c;通过集成常用库和工具&#xff0c;简化了环境管理和包安装&#xff0c;特别适合初学者和需要快速上手的开…...

Spring中ObjectProvider的妙用与实例解析

在Spring框架中&#xff0c;ObjectProvider是一个非常实用的接口&#xff0c;它可以帮助我们解决一些复杂的依赖注入问题&#xff0c;尤其是当我们需要注入生命周期较短的bean时。与传统的javax.inject.Provider相比&#xff0c;ObjectProvider在Spring 5.0中引入了许多新方法&…...

Easy系列PLC尺寸测量功能块(激光微距应用)

激光微距仪可以测量短距离内的产品尺寸,产品规格书的测量 精度可以到0.001mm。具体需要看不同的型号。 1、激光微距仪 2、尺寸测量应用 下面我们以测量高度为例子,设计一个高度测量功能块,同时给出测量数据和合格不合格指标。 3、高度测量功能块 4、复位完成信号 5、功能…...

当卷积神经网络遇上AI编译器:TVM自动调优深度解析

从铜线到指令&#xff1a;硬件如何"消化"卷积 在深度学习的世界里&#xff0c;卷积层就像人体中的毛细血管——数量庞大且至关重要。但鲜有人知&#xff0c;一个简单的3x3卷积在CPU上的执行路径&#xff0c;堪比北京地铁线路图般复杂。 卷积的数学本质 对于输入张…...

《网络编程基础之完成端口模型》

【完成端口模型导读】完成端口模型&#xff0c;算得上是真正的异步网络IO模型吧&#xff0c;相对于其它网络IO模型&#xff0c;操作系统通知我们的时候&#xff0c;要么就是连接已经帮我建立好&#xff0c;客户端套接字帮我们准备好&#xff1b;要么就是数据已经接收完成&#…...

Axure PR 9 旋转效果 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…...

完美还是完成?把握好度,辨证看待

完美还是完成&#xff1f; 如果说之前这个答案有争议&#xff0c;那么现在&#xff0c;答案毋庸置疑 ■为什么完美大于完成 ●时间成本&#xff1a; 做事不仅要考虑结果&#xff0c;还要考虑时间和精力&#xff0c;要说十年磨一剑的确质量更好&#xff0c;但是现实没有那么多…...

C++的类Class

文章目录 一、C的struct和C的类的区别二、关于OOP三、举例&#xff1a;一个商品类CGoods四、构造函数和析构函数1、定义一个顺序栈2、用构造和析构代替s.init(5);和s.release();3、在不同内存区域构造对象4、深拷贝和浅拷贝5、构造函数和深拷贝的简单应用6、构造函数的初始化列…...

C++中的内存管理

学完了类与对象&#xff0c;这节我们来了解一下内存里的那些事 文章目录 一、C/C中的内存分布 1. 常量区&#xff08;代码段&#xff09; (Text Segment) 2. 静态区&#xff08;数据段&#xff09; (Data Segment) 3. 堆区 (Heap) 4. 栈区 (Stack) 5. 内存映射区域 (Memory-map…...

MySQL为什么默认引擎是InnoDB ?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL为什么默认引擎是InnoDB &#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL为什么默认引擎是InnoDB &#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认引擎是 InnoDB&#xff0c;主要…...

ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)

ComfyUI 的 Janus-Pro 节点&#xff0c;一个统一的多模态理解和生成框架。 试用&#xff1a; https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安装…...

电脑要使用cuda需要进行什么配置

在电脑上使用CUDA&#xff08;NVIDIA的并行计算平台和API&#xff09;&#xff0c;需要进行以下配置和准备&#xff1a; 1. 检查NVIDIA显卡支持 确保你的电脑拥有支持CUDA的NVIDIA显卡。 可以在NVIDIA官方CUDA支持显卡列表中查看显卡型号是否支持CUDA。 2. 安装NVIDIA显卡驱动…...

利用Muduo库实现简单且健壮的Echo服务器

一、muduo网络库主要提供了两个类&#xff1a; TcpServer&#xff1a;用于编写服务器程序 TcpClient&#xff1a;用于编写客户端程序 二、三个重要的链接库&#xff1a; libmuduo_net、libmuduo_base、libpthread 三、muduo库底层就是epoll线程池&#xff0c;其好处是…...

Scratch 《像素战场》系列综合游戏:像素战场游戏Ⅰ~Ⅲ 介绍

资源下载 Scratch《像素战场》系列综合游戏合集&#xff1a;像素战场游戏Ⅰ~Ⅲ压缩包 https://download.csdn.net/download/leyang0910/90332765 游戏操作介绍 Scratch 《像素战场Ⅰ》操作规则&#xff1a; 这是一款与朋友一起玩的 1v1 游戏。先赢得6轮胜利&#xff01; WA…...

Android学习制作app(ESP8266-01S连接-简单制作)

一、理论 部分理论见arduino学习-CSDN博客和Android Studio安装配置_android studio gradle 配置-CSDN博客 以下直接上代码和效果视频&#xff0c;esp01S的收发硬件代码目前没有分享&#xff0c;但是可以通过另一个手机网络调试助手进行模拟。也可以直接根据我的代码进行改动…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...