题目要求
给出下面的多边形基类框架:
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; }
总结
该题考察类的构造函数
和成员函数的使用
、循环语句的运用
等知识点,读者可躬身实践。
我是秋说,我们下次见。