[C++/PTA] 多边形周长计算(继承)
题目要求
给出下面的多边形基类框架:
class polygon
{ protected:
int number;//边数,最多不超过100条边
private:
int side_length[100];//边长数组
public:
polygon();//构造函数根据需要重载
int perimeter();//计算多边形边长
void display();//输出多边形边数和周长
}
建立一个派生类rectangle(矩形),增加以下数据成员:
int height;
int width;
增加以下成员函数:
rectangle类的无参和参数化构造函数
int perimeter();//计算矩形边长
void display();//输出多边形边数和周长
建立一个派生类equal_polygon(等边多边形),增加以下数据成员:
int side_len;
增加以下成员函数:
equal_polygon类的无参和参数化构造函数
int perimeter();//计算等边多边形边长
void display();//输出多边形边数和周长
生成上述类并编写主函数,根据输入的多边形信息,相应建立一个多边形类对象或矩形类对象或等边多边形类对象,计算每一个多边形的周长并且输出其边数和周长。
输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入多边形的个数n,接下来n行每一行给出一个多边形的基本信息,每行的第一个数字为当前多边形的类型,0为一般多边形,后面跟随m个数字为m条边的边长,-1为一般多边形边长输入结束标志,1为矩形,后面跟随两个数字,分别为height和width,2为等边多边形,后面跟随两个数字为等边多边形的边数和边长。
输入样例:
3
0 32 54 76 88 24 -1
1 32 54
2 3 32
输出样例:
5 274
4 172
3 96
解题思路
实现了一个多边形类及其两个派生类——矩形和等边多边形。
其中,多边形类包含边数、边长数组这两个数据成员,以及计算多边形周长和输出多边形信息的成员函数。
矩形类继承了多边形类,并添加了高度和宽度两个数据成员和计算矩形周长的成员函数。
等边多边形类同样继承了多边形类,并添加了边长和计算等边多边形周长的成员函数。
在main函数中,首先读入多边形个数n,之后根据输入的字符ch,判断要创建的对象类型:
- 如果ch=0,读入该多边形的边数和各边长度,并创建一个多边形对象进行周长计算和输出;
- 如果ch=1,读入矩形的高度和宽度,并创建一个矩形对象进行周长计算和输出;
- 如果ch=2,读入等边多边形的边数和边长,并创建一个等边多边形对象进行周长计算和输出。循环n次后结束程序。
代码
#include<iostream>
using namespace std;
// 定义一个多边形类
class polygon {
protected:
int number; // 边数,最多不超过100条边
private:
int side_length[10]; // 边长数组,最多存储10条边的长度
public:
polygon() {
number = 0;
for (int i = 0; i < 100; i++) {
side_length[i] = 0;
}
}
// 重载构造函数,初始化边数
polygon(int Number) {
number = Number;
}
// 设置多边形各边的长度
void setside(int side[]) {
for (int i = 0; i < number; i++) {
side_length[i] = side[i];
}
}
// 计算多边形周长
int perimeter() {
int circum = 0;
for (int i = 0; i < number; i++) {
circum += side_length[i];
}
return circum;
}
// 输出多边形边数和周长
void display() {
cout << number << " " << perimeter() << endl;
}
};
// 定义一个矩形类,继承自多边形类
class rectangle : public polygon {
private:
int height; // 矩形高度
int width; // 矩形宽度
public:
rectangle() {
height = 0;
width = 0;
}
// 重载构造函数,初始化边数、高度和宽度
rectangle(int number, int a, int b) :polygon(number) {
height = a;
width = b;
}
// 计算矩形周长
int perimeter1() {
int circum = 0;
circum = 2 * (height + width);
return circum;
}
// 输出矩形边数和周长
void display1() {
cout << "4 " << perimeter1() << endl;
}
};
// 定义一个等边多边形类,继承自多边形类
class equal_polygon : public polygon {
private:
int side_len; // 等边多边形的边长
public:
equal_polygon() {
side_len = 0;
}
// 重载构造函数,初始化边数和边长
equal_polygon(int number, int side) :polygon(number) {
side_len = side;
}
// 计算等边多边形周长
int perimeter2() {
int circum = 0;
circum = side_len * number;
return circum;
}
// 输出等边多边形边数和周长
void display2() {
cout << number << " " << perimeter2() << endl;
}
};
int main() {
int n;
cin >> n; // 输入多边形个数
// 循环读入每个多边形的信息
for (int i = 0; i < n; i++) {
int ch;
cin >> ch; // 输入多边形类型
if (ch == 0) { // 多边形
int a[100];
int j = 0;
while (cin >> a[j] && (a[j] != -1)) {
j++; // 读入多边形各边的长度
}
polygon p1(j);
p1.setside(a);
p1.perimeter();
p1.display();
}
else if (ch == 1) { // 矩形
int a, b;
cin >> a >> b; // 输入矩形的高度和宽度
rectangle p2(4, a, b);
p2.perimeter1();
p2.display1();
}
else if (ch == 2) { // 等边多边形
int number, side;
cin >> number >> side; // 输入等边多边形的边数和边长
equal_polygon p3(number, side);
p3.perimeter2();
p3.display2();
}
}
return 0;
}
总结
该题考察类的构造函数
和成员函数的使用
、循环语句的运用
等知识点,读者可躬身实践。
我是秋说,我们下次见。