Defina la clase abstracta Contenedor, que deriva tres clases derivadas: Esfera (cilindro), Cilindro (cilindro) y Cubo (cubo), utilizando funciones virtuales para calcular el área de superficie y el volumen de varios gráficos.
const double PI = 3.1415926;
class Container
{
public:
virtual double surface_area () = 0; // función virtual pura surface_area, calcule el área de superficie del gráfico
volumen doble virtual () = 0; // volumen de función virtual pura, calcule el volumen del gráfico
} ;
Genere la clase anterior y escriba la función principal, de acuerdo con la información de gráficos de entrada, calcule el área de superficie y el volumen de los gráficos y la salida.
Formato de entrada:
ingrese el número N de gráficos en la primera línea, las siguientes N líneas cada línea proporciona la información básica de un polígono, el primer número en cada línea es el tipo del gráfico actual, 1 es la esfera, seguido del radio de la esfera; 2 es un cilindro, seguido de dos números, que son el radio y la altura de la parte inferior del cilindro; 3 es un cubo, y el siguiente número es la longitud lateral del cubo.
Formato de salida:
área de superficie correspondiente y volumen
Entrada de muestra: aquí se proporciona
un conjunto de entradas. Por ejemplo:
3
1 2
2 2 5
3 5
Salida de muestra:
aquí se proporciona la salida correspondiente. Por ejemplo:
Área de la superficie de la esfera: 50.2655, Volumen de la esfera: 33.5103
Área de la superficie del cilindro: 87.9646, Volumen del cilindro: 62.8319
Área de la superficie del cubo: 150, Volumen del cubo: 125
#include <iostream>
using namespace std;
const double PI = 3.1415926;
class Container {
public:
virtual double surface_area() = 0; //纯虚函数surface_area,计算图形的表面积
virtual double volume() = 0; //纯虚函数volume,计算图形的体积
};
class Sphere : public Container {
private:
double r;
public:
void set(double rr) {
r = rr;
}
double surface_area() override {
return 4 * PI * r * r;
}
double volume() override {
return 4 * PI * r * r * r / 3;
}
};
class Cylinder : public Container {
private:
double r, h;
public:
void set(double rr, double hh) {
r = rr;
h = hh;
}
double surface_area() override {
return 2 * PI * r * r + 2 * PI * r * h;
}
double volume() override {
return PI * r * r * h;
}
};
class Cube : public Container {
private:
double l;
public:
void set(double ll) {
l = ll;
}
double surface_area() override {
return l * l * 6;
}
double volume() override {
return l * l * l;
}
};
int main() {
int n, m;
double a, b;
Sphere sp;
Cylinder cy;
Cube cu;
cin >> n;
for (int i = 0; i < n; ++i) {//一开始我用的while,第一个测试点运行超时,试了好久,用for竟然通过了,如果跟我有一样情况的,希望会对你有用
cin >> m;
if (m == 1) {
cin >> a;
sp.set(a);
cout << "球体表面积:" << sp.surface_area() << ",球体体积:" << sp.volume()<<endl;
}
if (m == 2) {
cin >> a >> b;
cy.set(a, b);
cout << "圆柱体表面积:" << cy.surface_area() << ",圆柱体体积:" << cy.volume()<<endl;
}
if (m == 3) {
cin >> a;
cu.set(a);
cout << "正方体表面积:" << cu.surface_area() << ",正方体体积:" << cu.volume()<<endl;
}
}
}