在7.水图形周长和面积 【问题描述】 根据给出的程序片段编程,使程序正确运行。由基类Shape派生出圆类Circle(数据成员:半径)、正方形类Square(数据成员:边长)、三角形类Triangle(数据成员:三条边边长),3个派生类都有输入和显示信息函数Input、Output,计算面积的函数Area,计算周长的函数Perim。
时间: 2023-12-03 22:44:32 浏览: 46
以下是完整的程序代码,你可以参考一下:
```c++
#include<iostream>
#include<cmath>
using namespace std;
class Shape {
public:
virtual void Input() = 0;
virtual void Output() = 0;
virtual double Area() = 0;
virtual double Perim() = 0;
};
class Circle : public Shape {
private:
double radius;
public:
void Input() {
cout << "请输入圆的半径:" << endl;
cin >> radius;
}
void Output() {
cout << "圆的半径为:" << radius << endl;
cout << "圆的面积为:" << Area() << endl;
cout << "圆的周长为:" << Perim() << endl;
}
double Area() {
return 3.14 * pow(radius, 2);
}
double Perim() {
return 2 * 3.14 * radius;
}
};
class Square : public Shape {
private:
double edge;
public:
void Input() {
cout << "请输入正方形的边长:" << endl;
cin >> edge;
}
void Output() {
cout << "正方形的边长为:" << edge << endl;
cout << "正方形的面积为:" << Area() << endl;
cout << "正方形的周长为:" << Perim() << endl;
}
double Area() {
return pow(edge, 2);
}
double Perim() {
return 4 * edge;
}
};
class Triangle : public Shape {
private:
double a, b, c;
public:
void Input() {
cout << "请输入三角形的三条边长:" << endl;
cin >> a >> b >> c;
}
void Output() {
cout << "三角形的三条边长为:" << a << ", " << b << ", " << c << endl;
cout << "三角形的面积为:" << Area() << endl;
cout << "三角形的周长为:" << Perim() << endl;
}
double Area() {
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
double Perim() {
return a + b + c;
}
};
int main() {
Circle c;
Square s;
Triangle t;
c.Input();
c.Output();
s.Input();
s.Output();
t.Input();
t.Output();
return 0;
}
```
在程序中,定义了一个抽象基类 Shape,它包括了四个纯虚函数 Input、Output、Area 和 Perim。然后分别定义了圆、正方形和三角形三个派生类,它们都继承自 Shape 基类,并重写了基类中的四个纯虚函数。
在 main 函数中,分别创建了圆、正方形和三角形的对象,然后依次调用它们的 Input、Output 函数,即可输入数据、计算面积和周长,并输出结果。