【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】

前言

大家好吖,欢迎来到 YY 滴C++考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏

目录

  • 程序1:
  • 程序2:
  • 程序3:

程序1:

  • 写一个程序,定义抽象基类Container,由它派生出3个派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。

以下是一个使用虚函数计算不同图形表面积和体积的示例程序:

#include <iostream>
#include <cmath>
using namespace std;// 抽象基类:Container
class Container {
public:virtual double calculateSurfaceArea() = 0;virtual double calculateVolume() = 0;
};// 派生类:Sphere(球体)
class Sphere : public Container {
private:double radius;public:Sphere(double r) : radius(r) {}double calculateSurfaceArea() override {return 4 * M_PI * radius * radius;}double calculateVolume() override {return (4.0 / 3.0) * M_PI * radius * radius * radius;}
};// 派生类:Cylinder(圆柱体)
class Cylinder : public Container {
private:double radius;double height;public:Cylinder(double r, double h) : radius(r), height(h) {}double calculateSurfaceArea() override {return 2 * M_PI * radius * radius + 2 * M_PI * radius * height;}double calculateVolume() override {return M_PI * radius * radius * height;}
};// 派生类:Cube(正方体)
class Cube : public Container {
private:double sideLength;public:Cube(double s) : sideLength(s) {}double calculateSurfaceArea() override {return 6 * sideLength * sideLength;}double calculateVolume() override {return sideLength * sideLength * sideLength;}
};int main() {Sphere s(5);Cylinder c(3, 7);Cube cu(4);cout << "Sphere Surface Area: " << s.calculateSurfaceArea() << endl;cout << "Sphere Volume: " << s.calculateVolume() << endl;cout << "Cylinder Surface Area: " << c.calculateSurfaceArea() << endl;cout << "Cylinder Volume: " << c.calculateVolume() << endl;cout << "Cube Surface Area: " << cu.calculateSurfaceArea() << endl;cout << "Cube Volume: " << cu.calculateVolume() << endl;return 0;
}

在这个示例中,我们定义了抽象基类 Container,并派生出了 Sphere(球体)、Cylinder(圆柱体)和
Cube(正方体)三个派生类。每个派生类都实现了 calculateSurfaceAreacalculateVolume
虚函数来计算不同图形的表面积和体积。在 main 函数中,我们创建了每种图形的实例,并输出了它们的表面积和体积。

程序2:

  • 编写程序:定义抽象基类Shape,area( )为求图形面积的虚成员函数。由它派生出三个派生类:Circle(圆形)、Rectangle(长方形)、和Triangle (三角形),用虚函数area分别计算各种图形的面积。在主函数中,分别创建派生类的对象并计算其面积,求出它们的面积的和。要求用基类指针数组,使它的每一个元素指向一个派生类的对象,以体现多态性。

以下是一个使用多态性的示例程序,根据要求定义了抽象基类 Shape 和三个派生类 Circle(圆形)、Rectangle(长方形)和 Triangle(三角形):

#include <iostream>
#include <cmath>
using namespace std;// 抽象基类:Shape
class Shape {
public:virtual double area() = 0;
};// 派生类:Circle(圆形)
class Circle : public Shape {
private:double radius;public:Circle(double r) : radius(r) {}double area() override {return M_PI * radius * radius;}
};// 派生类:Rectangle(长方形)
class Rectangle : public Shape {
private:double length;double width;public:Rectangle(double l, double w) : length(l), width(w) {}double area() override {return length * width;}
};// 派生类:Triangle(三角形)
class Triangle : public Shape {
private:double base;double height;public:Triangle(double b, double h) : base(b), height(h) {}double area() override {return 0.5 * base * height;}
};int main() {Shape* shapes[3];shapes[0] = new Circle(5);shapes[1] = new Rectangle(4, 6);shapes[2] = new Triangle(3, 8);double totalArea = 0;for (int i = 0; i < 3; i++) {totalArea += shapes[i]->area();}cout << "Total area of all shapes: " << totalArea << endl;for (int i = 0; i < 3; i++) {delete shapes[i];}return 0;
}

在这个示例中,我们定义了抽象基类 Shape,并派生出了 Circle(圆形)、Rectangle(长方形)和
Triangle(三角形)三个派生类。每个派生类都实现了虚函数 area 来计算不同图形的面积。在 main
函数中,我们创建了一个基类指针数组,使其每个元素指向一个派生类的对象,以体现多态性。然后我们计算了每个图形的面积,并求出它们的面积的和。最后,记得释放动态分配的内存。

程序3:

  • 计算正方体、球体、圆柱体的体积。要求:定义基类shape,在其中定义求体积的纯虚函数volume,并定义一个数据成员r,它可作为球体的半径、正方体的边长以及圆柱体的底面圆半径。由shape类派生出3个类,分别是正方体类、球体类和圆柱体类,在这3个类中都具有求体积的重定义版本。在主函数中统一求3种对象的体积,实现多态性。

以下是符合您要求的C++程序,其中定义了一个抽象基类 Shape,并派生出了 Cube(正方体)、Sphere(球体)和 Cylinder(圆柱体)三个派生类:

#include <iostream>
#include <cmath>
using namespace std;// 抽象基类:Shape
class Shape {
public:virtual double volume() = 0;
};// 派生类:Cube(正方体)
class Cube : public Shape {
private:double sideLength;public:Cube(double s) : sideLength(s) {}double volume() override {return sideLength * sideLength * sideLength;}
};// 派生类:Sphere(球体)
class Sphere : public Shape {
private:double radius;public:Sphere(double r) : radius(r) {}double volume() override {return (4.0 / 3.0) * M_PI * pow(radius, 3);}
};// 派生类:Cylinder(圆柱体)
class Cylinder : public Shape {
private:double radius;double height;public:Cylinder(double r, double h) : radius(r), height(h) {}double volume() override {return M_PI * pow(radius, 2) * height;}
};int main() {Shape* shapes[3];shapes[0] = new Cube(5); // 正方体边长为5shapes[1] = new Sphere(3); // 球体半径为3shapes[2] = new Cylinder(4, 6); // 圆柱体底面圆半径为4,高度为6for (int i = 0; i < 3; i++) {cout << "Volume of shape " << i+1 << ": " << shapes[i]->volume() << endl;}for (int i = 0; i < 3; i++) {delete shapes[i];}return 0;
}

在这个示例中,我们定义了抽象基类 Shape,并派生出了 Cube(正方体)、Sphere(球体)和
Cylinder(圆柱体)三个派生类。每个派生类都实现了虚函数 volume 来计算不同图形的体积。在 main
函数中,我们创建了一个基类指针数组,使其每个元素指向一个派生类的对象,以体现多态性。然后我们计算了每个图形的体积,并输出结果。最后,记得释放动态分配的内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628215.shtml

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

相关文章

excel如何冻结窗格

冻结窗口&#xff08;Freeze Panes&#xff09; 打开你的 Excel 文件。 选择你希望冻结的行或列。 如果要冻结第一行&#xff0c;请选择第一行。 如果要冻结第一列&#xff0c;请选择第一列。 如果要同时冻结行和列&#xff0c;请选择希望冻结的左上角单元格的下方和右侧的单…

Docker容器(二)安装与初体验wordpress

一、安装 1.1关闭SeLinux SeLinux&#xff08;Security-Enhanced Linux&#xff09;是一种基于Linux内核的安全模块&#xff0c;旨在提供更严格的访问控制和安全策略。它通过强制实施安全策略来限制系统资源的访问&#xff0c;从而保护系统免受恶意软件和未经授权的访问。 在…

提升问题检索的能力

事实上&#xff0c;在信息极度丰富的时代&#xff0c;信息检索和筛选能力格外重要。一些搜索引擎的出现已极大地方便了我们日常的信息检索&#xff0c;此处需要注意的是我们不能仅仅局限于常见的搜索引擎&#xff0c;也需要关注和积累一些专业平台或是具有集成功能的引擎&#…

postman签名算法(将请求体参入签名算法计算)

let timestamp (new Date()).getTime().toString(); timestamp timestamp.substr(0,13); //设置集合的全局变量 pm.collectionVariables.set("timestamp", timestamp); var appkeyXXXXXXX; pm.collectionVariables.set("appkey",appkey); function …

2023国赛 陕西省省级二等奖得主 数学建模学习资源推荐

美国最为权威的数学建模参考书Mathematical Modeling 在前言部分对数学建模有一个比较通俗易懂的解释&#xff1a; Mathematical modeling is the link between mathematics and the rest of the world. You ask a question. You think a bit, and then you refine the questi…

pandas字符串操作(上)

目录 数据预览&#xff1a; 一、split分割列 1.需求&#xff1a; 2.完整代码展示 3.讲解 &#xff08;1&#xff09;分割 &#xff08;2&#xff09;写入 4.效果展示 二、partition分割列 1.需求&#xff1a; 2.完整代码展示 3.讲解 &#xff08;1&#xff09;分割…

推荐系统模型(一) DFN 详解 Deep Feedback Network for Recommendation

背景 在大多数的推荐系统中&#xff0c;往往注重于隐式正反馈(例如&#xff1a;点击)&#xff0c;而忽略掉用户的其他行为(例如大多数CTR模型只考虑用户的喜欢&#xff0c;而忽略了不喜欢)。腾讯在Deep Feedback Network for Recommendation 一文中&#xff0c;提出了一个新颖…

金三银四-解锁Java并发编程的艺术:掌握多线程、同步和并发控制的精髓

又要快到一年一度的金三银四&#xff0c;开始复习啦&#xff5e;&#xff01; 每天一点点。。 目录 一、Java中的volatile关键字有什么作用&#xff1f; 二、解释Java中的synchronized关键字及其工作原理。 三、Java中的CAS操作是什么&#xff1f;它如何实现无锁编程&#x…

【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

实验一、数论基础&#xff08;上&#xff09; 一、实验目的 1、通过本次实验&#xff0c;熟悉相关的编程环境&#xff0c;为后续的实验做好铺垫&#xff1b; 2、回顾数论学科中的重要基本算法&#xff0c;并加深对其的理解&#xff0c;为本学期密码学理论及实验课程打下良好…

WebSocket的进阶理解

通过前端的方法 let ws new WebSocket("ws://");ws.onopen function() {// 当 WebSocket 连接成功建立时触发 };ws.onmessage function(event) {// 当接收到 WebSocket 服务器发送的消息时触发let message event.data; // 获取接收到的消息内容 };ws.send("…

蓝桥杯备赛 | 洛谷做题打卡day5

蓝桥杯备赛 | 洛谷做题打卡day5 图论起航&#xff0c;一起来看看深&#xff08;广&#xff09;度优先吧 ~ 文章目录 蓝桥杯备赛 | 洛谷做题打卡day5图论起航&#xff0c;一起来看看深&#xff08;广&#xff09;度优先吧 ~【深基18.例3】查找文献题目描述 输入格式输出格式样例…

Docker创建网络macvlan并且和宿主机互通

docker network create -d macvlan --subnet192.168.1.0/24 --gateway192.168.1.1 --ip-range192.168.1.0/24 --ipv6 --subnetfe00::/64 -o parenteth0 subnet-macvlan ip地址位数表&#xff08;常用&#xff09; 掩码位数可用主机数&#xff08;主机地址数&#xff09;255.2…

易基因:表观遗传学和表观转录组修饰在植物金属和准金属暴露中的作用 | 抗逆综述

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 非必需金属&#xff08;non-essential metal&#xff09;和准金属&#xff08;metalloid&#xff0c;也称类金属&#xff09;对土壤的污染是全球许多地区面临的严重问题。这些非必需金属…

python 爬虫 生成markdown文档

本文介绍的案例为使用python爬取网页内容并生成markdown文档&#xff0c;首先需要确定你所需要爬取的框架结构&#xff0c;根据网页写出对应的爬取代码 1.分析总网页的结构 我选用的是redis.net.com/order/xxx.html (如:Redis Setnx 命令_只有在 key 不存在时设置 key 的值。…

【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC&#xff0c; 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…

C++ OJ基础

C OJ基础 在学校学习C程序设计基础课程的OJ题目 缺少第二十题 这里写目录标题 C OJ基础习题练习(一)打印图形习题练习(二)数据的输入输出习题练习(三)函数重载习题练习(四)设计矩形类习题练习(五)定义Tree类习题练习(六)完善职工工资类Salary的设计习题练习(七)设计矩形类recta…

双目测距工程Stereo-Vision-master学习笔记

硬件&#xff1a; 首先要要把两个摄像头固定到支架上&#xff0c;并且两个摄像头的间距应该在110mm&#xff0c;两个摄像头没有落差 相机的内参数包括焦距、主点坐标、像素尺寸等&#xff0c;这些参数决定了相机成像的几何变换关系。内参数是相机固有的属性&#xff0c;不会随…

UE5 UE4 修复GPU驱动程序崩溃

原贴链接&#xff1a;https://mp.weixin.qq.com/s/e5l9XtfwEFWgwhHi1b2idg UE5 UE4在处理含有大量图形的项目时&#xff0c;你有可能会遇到GPU崩溃 可以通过修改注册表&#xff0c;修复崩溃。 GPU崩溃情况概述 UE5 UE4在处理含有大量图形的项目时&#xff0c;你有可能会遇到G…

JS常用工具:Webpack 和 JShaman分别有什么用?

Webpack和JShaman是两个不同的工具&#xff0c;它们的特点和用途也不同。 Webpack是一个前端资源模块打包工具&#xff0c;主要用于将各种静态资源&#xff08;如JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;并将其打包成浏览器可以识别的代码。Webpack的特点包括…

通过生成mcs、bin文件将程序固化到FPGA

通过将程序固化到FPGA&#xff0c;可以做到断电不丢失程序&#xff0c;上电之后就自动启动程序的作用&#xff0c;整个固化步骤主要分为3步&#xff0c;一是修改约束文件&#xff0c;二是生成mcs或bin文件&#xff0c;三是将程序固化到开发板flash 1.修改约束文件 生成固化文…