c++图形题练习程序

一.练习题背景

这题是作者再一家公司实习的时候,实习期间的一个考核题目,感觉还是比较有价值的。希望能给还在努力的学弟学妹们一些启发。

题目大致就是要求用继承和多态来实现圆、三角形和长方形的面积和周长求解。这步的大致思路是这样的,你需要将整体的图形类抽象出来,提取出它们共有的一些特性。比如说都是计算周长和面积,那这部分就再父类抽象出来,子类复现就行。

二.程序展示

以下是一个基于 C++ 的几何图形类练习程序,实现了形状基类及其派生类(圆、三角形、长方形),并计算不同形状的面积和与周长和:

#include <iostream>
#include <cmath> // 用于三角形面积计算(海伦公式)
using namespace std;
#define M_PI 3.14// 形状基类
class Shape {
public:// 纯虚函数:计算面积和周长(基类不实现,由派生类重写)virtual double area() const = 0;virtual double perimeter() const = 0;// 虚函数:输出形状信息(派生类可重写)virtual void print() const = 0;
};// 圆类(派生自Shape)
class Circle : public Shape {
private:double radius; // 半径
public:// 构造函数Circle(double r) : radius(r) {}// 计算面积:πr²double area() const override {return M_PI * radius * radius;}// 计算周长:2πrdouble perimeter() const override {return 2 * M_PI * radius;}// 输出圆的信息void print() const override {cout << "圆:半径=" << radius<< ",面积=" << area()<< ",周长=" << perimeter() << endl;}
};// 长方形类(派生自Shape)
class Rectangle : public Shape {
private:double length;  // 长double width;   // 宽
public:// 构造函数Rectangle(double l, double w) : length(l), width(w) {}// 计算面积:长×宽double area() const override {return length * width;}// 计算周长:2×(长+宽)double perimeter() const override {return 2 * (length + width);}// 输出长方形信息void print() const override {cout << "长方形:长=" << length << ",宽=" << width<< ",面积=" << area()<< ",周长=" << perimeter() << endl;}
};// 三角形类(派生自Shape)
class Triangle : public Shape {
private:double a, b, c; // 三边长
public:// 构造函数(简单判断三角形合法性)Triangle(double x, double y, double z) : a(x), b(y), c(z) {if (a + b <= c || a + c <= b || b + c <= a) {cout << "警告:三边无法构成三角形!" << endl;}}// 计算面积(海伦公式)double area() const override {double s = (a + b + c) / 2; // 半周长return sqrt(s * (s - a) * (s - b) * (s - c));}// 计算周长:三边之和double perimeter() const override {return a + b + c;}// 输出三角形信息void print() const override {cout << "三角形:三边长=" << a << "," << b << "," << c<< ",面积=" << area()<< ",周长=" << perimeter() << endl;}
};int main() {// 定义三个不同派生类对象(示例数据)Shape* shape1 = new Circle(5.0);       // 半径为5的圆Shape* shape2 = new Rectangle(4.0, 6.0); // 长4、宽6的长方形Shape* shape3 = new Triangle(3.0, 4.0, 5.0); // 直角三角形(3,4,5)// 输出各形状信息cout << "各形状信息:" << endl;shape1->print();shape2->print();shape3->print();// 计算面积之和与周长之和double totalArea = shape1->area() + shape2->area() + shape3->area();double totalPerimeter = shape1->perimeter() + shape2->perimeter() + shape3->perimeter();// 输出总和cout << "\n面积之和:" << totalArea << endl;cout << "周长之和:" << totalPerimeter << endl;// 释放动态内存delete shape1;delete shape2;delete shape3;return 0;
}

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

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

相关文章

【论文阅读 | PR 2024 |ITFuse:一种用于红外与可见光图像融合的交互式 Transformer】

论文阅读 | PR 2024 |ITFuse&#xff1a;一种用于红外与可见光图像融合的交互式 Transformer1.摘要&&引言2.方法2.1 问题表述2.2 框架概述2.3 特征交互模块2.3.1 共同特征提取分支&#xff08;IcI_{c}Ic​ 分支&#xff09;2.3.2 独特特征提取分支&#xff08;I1I_{1}I…

【Qt】 设计模式

在Qt应用程序开发中&#xff0c;结合数据库操作、通信、界面逻辑和显示等功能&#xff0c;以下是常用的设计模式及其典型应用场景&#xff1a; 一、MVC/MVVM&#xff08;模型-视图-控制器/视图模型&#xff09; 作用&#xff1a;分离数据&#xff08;模型&#xff09;、界面&am…

【HarmonyOS】ArkUI-X 跨平台框架入门详解(一)

【HarmonyOS】ArkUI-X 跨平台框架入门详解&#xff08;一&#xff09; 一、前言 1、ArkUI-X框架是什么&#xff1f; ArkUI-X是在ArkUI开发框架的基础上&#xff0c;进行扩展。支持多个OS平台&#xff0c;目前支持OpenHarmony、HarmonyOS、Android、 iOS。2、ArkUI-X目前的能力现…

开发者进化论:驾驭AI,开启软件工程新纪元

导语&#xff1a;人工智能&#xff08;AI&#xff09;的浪潮&#xff0c;特别是以大型语言模型&#xff08;LLM&#xff09;为代表的生成式AI&#xff0c;正以前所未有的力量&#xff0c;深刻地重塑着软件开发的传统疆域。我们正处在一个关键的转折点——产业的重心正从模型的“…

智慧水务平台,智慧水务,惠及民生,提升水务管理效率与服务质量

平升电子智慧水务平台支持海量物联网数据接入实现供水全流程信息化&#xff0c;深度逻辑运算自动控制实现供水调度智慧化&#xff0c;融入管网地理信息系统实现测点数据时空化&#xff0c;数字孪生实现水厂各工艺环节运行情况可视化&#xff0c;多角度统计分析实现水务运营管理…

【Unity基础】Unity中元素的层级排序

在Unity中&#xff0c;控制元素的层级排序&#xff08;渲染顺序&#xff09;是确保场景正确显示的关键。以下是常见的层级排序方式及其适用场景&#xff1a;1. 通过GameObject的层级顺序&#xff08;Sorting Layer/Order in Layer&#xff09; 适用对象&#xff1a;2D精灵&…

梁的振动特征函数分析2

问题7&#xff1a;左端固定、右端自由梁的振动分析 考虑梁的振动方程&#xff1a; uttKuxxxx0,0<x<l,K>0 u_{tt} K u_{xxxx} 0, \quad 0 < x < l, \quad K > 0 utt​Kuxxxx​0,0<x<l,K>0 边界条件&#xff1a; 左端固定&#xff08;位移和斜率为零…

AI问答-Token:在人工智能领域,Token 是模型处理文本的核心单元 / 最小可处理片段

一、在人工智能领域&#xff0c;Token 是模型处理文本的核心单元&#xff0c;可理解为文本的“最小可处理片段”二、表格理解类别详细说明基本定义Token 是模型处理文本的最小语义或语法单位&#xff0c;可以是单词、子词、字符、标点符号或特殊符号。例如&#xff1a;- 单词级…

读取ubuntu的磁盘分区表与超级块

1.读取磁盘分区表sudo fdisk -l /dev/sda2.计算偏移量分区起始偏移 4096 512 2097152 字节 超级块位置 2097152 1024 2098176字节3.快速验证&#xff08;直接检查魔数 53 &#xff09;# 检查偏移 2,098,176 处是否有 EXT4 魔数 sudo dd if/dev/sda bs1 count2 skip$((209…

科技驯服烈日狂沙:中东沙漠农场的光储革命

作者 | 小葳 阿布扎比郊外的午后&#xff0c;沙漠灼热、干旱难耐。 然而一座农场内&#xff0c;景象截然不同&#xff1a;蔬菜生机盎然&#xff0c;果实挂满枝头。农户轻点手机&#xff0c;远程调控着大棚内温湿度&#xff1b;灌溉与施肥&#xff0c;则由系统自动精准执行。 这…

基于Chinese-CLIP与ChromaDB的中文图像检索功能实现

本文按“原理 → 代码 → 讲解”三层展开&#xff0c;读者只需具备 Python 基础即可跟随完成一个可落地的以文搜图应用。 一、整体思路 把图片和文字都转成固定长度的向量&#xff08;768 维&#xff09;。把图片向量提前存入向量数据库。查询时把文字转成向量&#xff0c;再找…

Pandas 的 Index 与 SQL Index 的对比

一、Pandas 的 Index&#xff08;索引&#xff09;是什么&#xff1f;Pandas 的 Index 就像是 Excel 表格的行号 列标题&#xff0c;或者书的目录。核心作用&#xff1a;定位数据&#xff1a;就像 Excel 中用行号和列名定位单元格&#xff08;如 A1、B2&#xff09;&#xff0…

Rust指针选择

Rust指针选择&#xff1a; 1.优先使用引用&#xff1a;安全访问数据 fn process(data: &[i32]) { /* ... */ }2.需要所有权转移时用 Box fn create() -> Box<Data> { Box::new(Data::new()) }3.共享数据用 Rc/Arc // 单线程 let shared Rc::new(data);// 多线程 …

【实用IP查询工具】IP数据云-IP地址查询离线库使用方案

IP数据云&#xff08;ipdatacloud.com&#xff09;深耕IP地址查询技术&#xff0c;打造了覆盖多场景、高精度的IP地址查询离线库&#xff0c;为不同行业客户提供稳定、高效的本地化数据支持。 什么是IP 地址查询 离线库&#xff1f; IP地址查询离线库是将海量IP地址与对应的地…

UE5CameraShake参数详解

使用CameraShakeBase蓝图中简单调用和调试 使用 Play World Camera Shake 这个节点带有震动衰减效果Epicenter是震动中心点 传入Boss的位置 Inner Radius是 内部范围 距离小于内部范围时 , 全强度震动Outer Radius是 外部范围 距离大于外部范围时 , 就无震动Falloff 是衰…

java学习 day4 分布式锁

P60分布式锁误删线程标示和锁中标示一致P61分布式锁的原子性问题判断锁标示和释放锁不同时 造成误删P62Lua脚本P63java执行Lua脚本原子性P64redissionredisson框架P65redisson入门P66redisson可重入锁原理和测试redisson可重入锁P67锁重试看门狗看到67 10min处&#xff0c;看不…

python+selenium UI自动化初探

在公司上班闲的没事干&#xff0c;学点selenium 先安装selenium pip install selenium出现报错 Cannot uninstall certifi None ╰─> The packages contents are unknown: no RECORD file was found for certifi.hint: You might be able to recover from this via: pip in…

前端-CSS-day3

目录 1、结构伪类选择器-基本使用 2、结构伪类选择器-公式用法 3、伪元素选择器 4、盒子模型-组成 5、盒子模型-边框线 6、盒子模型-单方向边框线 7、盒子模型-内边距 8、盒子模型-内边距-多值写法 9、盒子模型-尺寸计算 10、盒子模型-版心居中 11、清除默认样式 1…

BPE(Byte Pair Encoding)分词算法

下面是对 BPE&#xff08;Byte Pair Encoding&#xff09;分词算法的深入介绍&#xff0c;涵盖其背景、原理、实现细节、数学机制、优缺点以及在自然语言处理中的实际应用。一、背景与动机在自然语言处理中&#xff0c;模型输入通常需要被转换为数值序列&#xff0c;而这首先需…

ssm学习笔记day07mybatis

项目的准备 创建springboot项目&#xff08;moudle&#xff09;&#xff0c;加入依赖lombok(自动添加setter,getter,toString)、Spring Web&#xff08;处理servlet请求&#xff09;、MySQL Driver(mysql的驱动器&#xff09;、JDBC&#xff08;JAVA与mysql的接口&#xff09;、…