题目要求
给出下面的多边形基类框架:
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
解题思路
详见注释
代码
#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;
}
文章描述了一个C++编程问题,要求建立一个多边形基类以及矩形和等边多边形的派生类,每个类包含特定的数据成员和成员函数。程序需要根据输入创建相应的对象并计算周长。输入包括多边形的类型、边数或尺寸,输出是每个图形的边数和周长。
2338

被折叠的 条评论
为什么被折叠?



