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

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 ContainerSquare类继承自Container类,使用public继承方式,意味着基类的publicprotected成员在派生类中保持原有的访问权限。
  • Square(double r) : Container(r) {}:构造函数,调用基类的构造函数来初始化radius成员变量。
  • double area():实现基类的纯虚函数area(),用于计算正方体的表面积。

3. 派生类Ball的定义

  • class Ball : public ContainerBall类继承自Container类。
  • Ball(double r) : Container(r) {}:构造函数,调用基类的构造函数来初始化radius成员变量。
  • double area():实现基类的纯虚函数area(),用于计算球的表面积。

4. 派生类Cylinder的 定义

  • class Cylinder : public ContainerCylinder类继承自Container类。
  • private: double height;:定义一个私有成员变量height,用于存储圆柱体的高度。
  • Cylinder(double r, double h) : Container(r), height(h) {}:构造函数,调用基类的构造函数来初始化radius成员变量,并初始化height成员变量。
  • double area():实现基类的纯虚函数area(),用于计算圆柱体的表面积。

5. 主函数

  • 创建SquareBallCylinder类的对象,并分别初始化它们的半径和高度。
  • 调用每个对象的area()函数计算表面积,并使用cout输出结果。

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

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

友友们一起加油叭QAQ

http://www.lryc.cn/news/530575.html

相关文章:

  • C++ 泛型编程指南02 (模板参数的类型推导)
  • 音视频入门基础:RTP专题(5)——FFmpeg源码中,解析SDP的实现
  • 计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)
  • 【视频+图文详解】HTML基础3-html常用标签
  • FreeRTOS学习 --- 消息队列
  • PHP If...Else 语句详解
  • pytorch使用SVM实现文本分类
  • 安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】
  • 【Qt】常用的容器
  • 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
  • 分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置
  • JavaScript常用的内置构造函数
  • 25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表
  • MQTT知识
  • 【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析
  • 新一代搜索引擎,是 ES 的15倍?
  • 使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱
  • PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统
  • word2vec 实战应用介绍
  • C# 操作符重载对象详解
  • python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理
  • CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)
  • 虚幻基础16:locomotion direction
  • C++游戏开发实战:从引擎架构到物理碰撞
  • 代理模式——C++实现
  • 什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?
  • LeetCode 2909. 元素和最小的山形三元组 II
  • 搬迁至bilibili声明
  • 【周易哲学】生辰八字入门讲解(八)
  • 复制粘贴小工具——Ditto