首页 > 编程语言 >[C++/PTA] 计算正方体、圆柱体的表面积、体积

[C++/PTA] 计算正方体、圆柱体的表面积、体积

时间:2023-06-14 19:59:05浏览次数:38  
标签:正方体 表面积 Container 函数 对象 double C++ PTA 计算

题目要求

从立方体、圆柱体抽象出一个公共基类Container,定义抽象类Container,模拟实现一个容器类层次结构,在主函数进行多态机制测试。各派生类要求实现基类的所有纯虚函数。

抽象类class Container {
protected:
static double pi;
public:
virtual double area()=0; //纯虚函数,计算对象的表面积
virtual double volume()=0; //纯虚函数,计算对象的体积
static double sumofarea(Container *c[],int n) ; //静态成员函数,计算所有对象的面积之和
static double sumofvolume(Container *c[],int n); //静态成员函数,计算所有对象的体积之和
};
double Container::pi=3.1415926;

Cube类、Cylinder类均继承抽象类Container。
Cube类(属性:边长double类型)、Cylinder类(属性:底圆半径、高,double类型)。

在主函数用new运算符生成若干容器类的堆对象,定义基类指针数组,其元素分别指向不同容器类对象,实现多态的异质数组,通过调用Container::sumofarea、Container::sumofvolume计算所有容器对象的表面积之和、体积之和 。

输入格式:
第一行n表示对象个数,对象类型用cube、cylinder区分,cube表示立方体对象,后面输入边长,cylinder表示圆柱体对象,后面是底圆半径、高。

输出格式:
分别输出所有容器对象的表面积之和、体积之和,结果保留小数点后2位。

输入样例:
在这里给出一组输入。例如:
4
cube
15.7
cylinder
23.5 100
cube
46.8
cylinder
17.5 200

输出样例:
在这里给出相应的输出。例如:
56771.13
472290.12

解题思路

主要思路:

  1. 定义抽象类 Container,包含纯虚函数 area 和 volume,以及静态成员函数 sumofarea 和 sumofvolume。

  2. 定义 Cube 类和 Cylinder 类,它们分别继承自 Container,实现其所有纯虚函数。

  3. 在主函数中使用 new 运算符生成若干个容器对象,并将它们存储到基类指针数组 pShapes[] 中。通过输入的对象类型来判断需要生成 Cube 对象还是 Cylinder 对象。

  4. 调用 Container 类的静态成员函数 sumofarea 和 sumofvolume 分别计算所以对象的表面积和体积之和。

代码

#include <iostream>
#include <iomanip> //用于控制输出格式
using namespace std;

class Container {
protected:
    static double pi; //静态成员变量,表示π
public:
    virtual double area() = 0; //纯虚函数,计算对象的表面积
    virtual double volume() = 0; //纯虚函数,计算对象的体积
    static double sumofarea(Container *c[], int n); //静态成员函数,计算所有对象的面积之和
    static double sumofvolume(Container *c[], int n); //静态成员函数,计算所有对象的体积之和
};

double Container::pi = 3.1415926;

Container *pShapes[100]; //定义基类指针数组

//Cube 类
class Cube : public Container {
public:
    double lenth; //边长
    double area() { return lenth * lenth * 6; } //重载 area 函数,计算立方体的表面积
    double volume() { return lenth * lenth * lenth; } //重载 volume 函数,计算立方体的体积
};

//Cylinder 类
class Cylinder : public Container {
public:
    double round, height; //底圆半径和高
    double area() { return 2 * pi * round * height + 2 * pi * round * round; } //重载 area 函数,计算圆柱体的表面积
    double volume() { return pi * round * round * height; } //重载 volume 函数,计算圆柱体的体积
};

//计算所有对象的面积之和
double Container::sumofarea(Container *c[], int n) {
    int i;
    double sum = 0;
    for (i = 0; i < n; i++) {
        sum += c[i]->area();
    }
    cout << fixed << setprecision(2) << sum << endl; //保留小数点后两位输出
    return sum;
}

//计算所有对象的体积之和
double Container::sumofvolume(Container *c[], int n) {
    int i;
    double sum = 0;
    for (i = 0; i < n; i++) {
        sum += c[i]->volume();
    }
    cout << fixed << setprecision(2) << sum << endl; //保留小数点后两位输出
    return sum;
}

int main() {
    Cube *pbe;
    Cylinder *per;
    int n, i;
    cin >> n;
    for (i = 0; i < n; i++) {
        string c;
        cin >> c;
        if (c == "cube") {
            pbe = new Cube();
            cin >> pbe->lenth;
            pShapes[i] = pbe; //将生成的立方体指针存储到基类指针数组中
        }
        if (c == "cylinder") {
            per = new Cylinder();
            cin >> per->round >> per->height;
            pShapes[i] = per; //将生成的圆柱体指针存储到基类指针数组中
        }
    }
    Container::sumofarea(pShapes, n); 
    //调用静态成员函数计算所有对象的表面积之和
    
    Container::sumofvolume(pShapes, n); 
    //调用静态成员函数计算所有对象的体积之和
    
    return 0;
}

总结

该题考察继承多态的知识点,包括抽象类、纯虚函数、静态成员变量和函数、基类指针和动态内存分配等。
同时也涉及了控制台格式化输出等基础知识点。

我是秋说,我们下次见。

标签:正方体,表面积,Container,函数,对象,double,C++,PTA,计算
From: https://www.cnblogs.com/qiushuo/p/17481201.html

相关文章

  • [C++/PTA] 抽象类Shape
    题目要求请编写一个抽象类Shape,包括两个纯虚函数,分别为计算面积getArea()和计算周长getPerim()。通过Shape类派生出矩形类Rectangle和圆类Circle,并计算各自的面积和周长。测试用例具体要求:输入1表示测试矩形类,之后输入矩形长和宽。输入2表示测试圆类,之后输入圆半径。Shape类定......
  • [C++/PTA] 计算点到直线的距离一一友元函数的应用
    题目要求计算点到直线的距离。首先设计一个点类Point,它有2个私有数据成员x和y,表示点的坐标。另一个类为直线类Line,它有3个私有数据成员a,b和c,表示直线方程ax+by+c=0。这两个类中都说明了一个友元函数dist,用于计算一个点到直线的距离。点(x.y)到直线ax+by+c=0的距离d的计算......
  • [C++/PTA] 队列操作
    题目要求请实现一个MyQueue类,实现出队,入队,求队列长度.实现入队函数voidpush(intx);实现出队函数intpop();实现求队列长度函数intsize();输入格式:每个输入包含1个测试用例。每个测试用例第一行给出一个正整数n(n<=10^6),接下去n行每行一个数字,表示一种操作:1x:......
  • [C++/PTA] 表彰优秀学生(多态)
    题目要求学期结束,班主任决定表彰一批学生,已知该班学生数在6至50人之间,有三类学生:普通生,特招运动员,学科专长生,其中学科专长生不超过5人。主函数根据输入的信息,相应建立GroupA,GroupB,GroupC类对象。GroupA类是普通生,有2门课程的成绩(均为不超过100的非负整数);GroupB类是特招运......
  • [C++/PTA] 2017Final进位与借位
    题目要求凤湖小学二年级的陈老师吃惊地发现班上的同学竟然可以分成三类,一类总是可以正确地完成三位整数加减法(GroupA);一类总是可以正确地完成三位整数的加法,但对于减法运算来说,总是忘记借位的处理(GroupB);剩下的人总是忘记加法的进位,也总是忘记减法的借位(GroupC)。现在请给出......
  • [C++] 什么是vertor容器?
    基本概念C++中的vector是一种顺序容器,是一个封装了动态大小数组的顺序容器,可以存放任意类型的数据。vector可以随着元素的加入自动扩充其大小,并且支持在中间插入或删除元素。vector的声明方式为:vector<元素类型>数组名;例如,声明一个储存整数的vector变量可以这样写:......
  • [C++/PTA] 虚函数的应用
    题目要求补充下列代码,使得程序的输出为:A:3A:15B:53155类和函数接口定义:参见裁判测试程序样例中的类和函数接口。裁判测试程序样例:#include<iostream>usingnamespacestd;classCMyClassA{intval;public:CMyClassA(int);voidvirtualprint();......
  • [C++/PTA] 学生成绩快速录入
    题目要求现在需要录入一批学生的成绩(学号,成绩)。其中学号是正整数,并且录入时,后录入学生的学号会比前面的学号大;成绩分两等,通过(Pass,录入时用1代表),不通过(Fail,录入时用0代表)。由于很多学号都是相邻的,并且学号相邻的学生成绩常常相同。所以在录入时,适当地加了速。如果当前学生......
  • [C++/PTA] 我的支付宝和余额宝
    题目要求支付宝AliPay和余额宝AliFund是一对好兄弟,他们来自同一个父类Account。已知类Account是支付宝AliPay和余额宝AliFund的虚基类,包括两个protected成员数据:longID;//账号stringname;//用户名支付宝AliPay是类Account的保护派生类,包括两个新增protected成员数据:double......
  • C/C++中的变长结构体
    1.问题来源首先看下如下的一段代码:#include<stdlib.h>#include<stdio.h>#include<string.h>#defineMAX_LEN1024typedefstructKDtree{doubledata[MAX_LEN];//数据intdim;//选择的维度structKDtree*left;//左子树structKDtree*right;......