#include <iostream> #include <cmath> using namespace std; const double pi = 3.14; class Circle{ private: int r; public: Circle(int a):r(a){} }; class Cylinder:public Circle{ private: int h; public: Cylinder(int a,int b):Circle(a){ h=b; } void gets(){ double S,V; S=2*pi*r*r+2*pi*r*h; V=pi*r*r*h; cout<<S<<" "<<V<<endl; } }; int main(){ int a,b; cin>>a>>b; Cylinder x1(a,b); x1.gets(); return 0; }
时间: 2023-06-15 22:04:54 浏览: 86
这段代码实现了计算圆柱的表面积和体积。其中,Circle类表示圆,Cylinder类继承自Circle类,表示圆柱。在Cylinder类中,使用了圆的半径r和圆柱的高h来计算表面积和体积,并将结果输出。在主函数中,通过输入半径和高来创建一个Cylinder对象,并调用gets()函数来计算并输出表面积和体积。
相关问题
Description 声明一个Shape抽象类,在此基础上派生出Rectangle类和Circle类,两者都有GetArea()和GetPerim()函数,用来计算面积和周长,麻烦封装以上各类,编写程序。需要提交类shape、Rectangle、Cricle类 Input 第一行输入n,表示n个测试例子;接下来有n行,每一行输入数,a、b、c,表示矩形的宽、长,以及圆形的半径 Output 对应每一行输入: 第一行输出矩形的面积、周长 第二行输出圆形的面积、周长 Sample_Input 1 2 2 3 Sample_Ouput 4 8 28.26 18.84 4 8 28.26 18.84 cpp:#include <iostream> using namespace std; const double PI = 3.14; #include "source.h" int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); double n,a,b,c; cin>>n; for(int i=0;i<n;i++) { Shape *s; cin>>a>>b>>c; s = new Rectangle(a,b); cout<<s->GetArea()<<" "<<s->GetPerim()<<endl; delete s; s = new Circle(c); cout<<s->GetArea()<<" "<<s->GetPerim()<<endl; delete s; } return 0; }
shape.h:
```cpp
#ifndef SHAPE_H
#define SHAPE_H
class Shape {
public:
virtual double GetArea() = 0;
virtual double GetPerim() = 0;
};
#endif
```
rectangle.h:
```cpp
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include "shape.h"
class Rectangle : public Shape {
public:
Rectangle(double width, double length);
virtual double GetArea();
virtual double GetPerim();
private:
double m_width;
double m_length;
};
#endif
```
rectangle.cpp:
```cpp
#include "rectangle.h"
Rectangle::Rectangle(double width, double length)
: m_width(width), m_length(length) {}
double Rectangle::GetArea() {
return m_width * m_length;
}
double Rectangle::GetPerim() {
return 2 * (m_width + m_length);
}
```
circle.h:
```cpp
#ifndef CIRCLE_H
#define CIRCLE_H
#include "shape.h"
class Circle : public Shape {
public:
Circle(double radius);
virtual double GetArea();
virtual double GetPerim();
private:
double m_radius;
};
#endif
```
circle.cpp:
```cpp
#include "circle.h"
#include <cmath>
Circle::Circle(double radius)
: m_radius(radius) {}
double Circle::GetArea() {
return PI * pow(m_radius, 2);
}
double Circle::GetPerim() {
return 2 * PI * m_radius;
}
```
声明一个Shape抽象类,在此基础上派生出Rectangle类和Circle类,两者都有GetArea()和GetPerim()函数,用来计算面积和周长,麻烦封装以上各类,编写程序。需要提交类shape、Rectangle、Cricle类 Input 第一行输入n,表示n个测试例子;接下来有n行,每一行输入数,a、b、c,表示矩形的宽、长,以及圆形的半径 Output 对应每一行输入: 第一行输出矩形的面积、周长 第二行输出圆形的面积、周长 Sample_Input 1 2 2 3 Sample_Ouput 4 8 28.26 18.84 Hint const double PI = 3.14; (Already defined)
以下是题目所需的抽象类 Shape、Rectangle 和 Circle 的代码实现。
```
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14;
class Shape{
public:
virtual double GetArea() = 0;
virtual double GetPerim() = 0;
};
class Rectangle : public Shape{
public:
Rectangle(double w, double h){
width = w;
height = h;
}
double GetArea(){
return width * height;
}
double GetPerim(){
return 2 * (width + height);
}
private:
double width;
double height;
};
class Circle : public Shape{
public:
Circle(double r){
radius = r;
}
double GetArea(){
return PI * pow(radius, 2);
}
double GetPerim(){
return 2 * PI * radius;
}
private:
double radius;
};
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
double a, b, c;
cin >> a >> b >> c;
Rectangle r(a, b);
Circle cir(c);
cout << r.GetArea() << " " << r.GetPerim() << endl;
cout << cir.GetArea() << " " << cir.GetPerim() << endl;
}
return 0;
}
```
这里使用了纯虚函数和多态,将 Shape 定义为一个抽象类,Rectangle 和 Circle 继承自 Shape,并实现了 GetArea() 和 GetPerim() 方法。在 main 函数中,先输入测试用例的个数,然后依次输入每个测试用例中矩形的宽和长,以及圆形的半径。对于每个测试用例,创建一个 Rectangle 和一个 Circle 的对象,然后分别调用 GetArea() 和 GetPerim() 方法,输出矩形的面积和周长,以及圆形的面积和周长。
阅读全文