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

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.kler.cn/a/530028.html

相关文章:

  • 3 [通用GITHUB投毒免杀工具安装木马攻击活动的详细分析]
  • 41【文件名的编码规则】
  • Java基础知识总结(三十七)--io异常的处理方式
  • MySQL知识点总结(十七)
  • Oracle Primavera P6自动进行进度计算
  • SAP内向交货单详解
  • 用Python替代OpenMV IDE显示openmv USB 图像
  • vscode+vue3+高得地图开发过过程中本地视频及地图json文件的发布问题
  • 算法题(55):用最少数量的箭引爆气球
  • 【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(二)
  • DeepSeek R1 简易指南:架构、本地部署和硬件要求
  • 软件工程概论试题五
  • Visual Basic语言的云计算
  • 设计模式-创建型模式-建造者模式
  • 【单层神经网络】基于MXNet的线性回归实现(底层实现)
  • 【华为OD-E卷 - 最大矩阵和 100分(python、java、c++、js、c)】
  • Mac上有哪些好用的开源粘贴板app
  • TB6600和DM542C两种常见的步进电机驱动器
  • 数据库安全管理中的权限控制:保护数据资产的关键措施
  • 实战:如何利用网站日志诊断并解决收录问题?
  • c++可变参数详解
  • 前端知识速记--HTML篇:src和href
  • 【4】阿里面试题整理
  • Joplin 插件在Vscode中无法显示图片
  • UE5 蓝图学习计划 - Day 6:角色蓝图
  • Observability:实现 OpenTelemetry 原生可观察性的商业价值