一、问题描述:
给出下面的多边形基类框架:
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为等边多边形,后面跟随两个数字为等边多边形的边数和边长。
二、解题思路:
首先根据题目要求对多边形基类进行定义,再定义保护和私有成员数据以及成员函数,再定义由其延申出来子类矩形类和等边多边行类,定义成员函数计算边长和输出的函数,最后,在主函数中输入多边形的信息,输出该多边形的边数以及周长。
三、代码实现:
1 #include<iostream> 2 using namespace std; 3 class polygon 4 { 5 protected: 6 int number; 7 private: 8 int side_length[100]; 9 public: 10 polygon() = default; 11 polygon(int n) 12 { 13 number = n; 14 for (int i = 0; i < 100; i++) 15 { 16 side_length[i] = 0; 17 } 18 } 19 void setlen(int *l) 20 { 21 for (int i = 0; i < 100; i++) 22 { 23 side_length[i] = *(l + i); 24 } 25 } 26 int perimeter() 27 { 28 int sum = 0; 29 for (int i = 0; i < 100; i++) 30 { 31 sum += side_length[i]; 32 } 33 return sum; 34 } 35 void display() 36 { 37 cout << number << " " << perimeter() + 1 << endl; 38 } 39 }; 40 class rectangle :public polygon 41 { 42 protected: 43 int height; 44 int width; 45 public: 46 rectangle() = default; 47 rectangle(int h, int w) 48 { 49 height = h; 50 width = w; 51 } 52 int perimeter() 53 { 54 return 2 * (height + width); 55 } 56 void display() 57 { 58 cout << "4" << " " << perimeter() << endl; 59 } 60 }; 61 class equal_polygon :public polygon 62 { 63 protected: 64 int side_len; 65 public: 66 equal_polygon() = default; 67 equal_polygon(int n, int l) 68 { 69 number = n; 70 side_len = l; 71 } 72 int perimeter() 73 { 74 return number * side_len; 75 } 76 void display() 77 { 78 cout << number << " " << perimeter() << endl; 79 } 80 }; 81 int main() 82 { 83 int n; 84 cin >> n; 85 int judge; 86 for (int i = 0; i < n; i++) 87 { 88 cin >> judge; 89 if (judge == 0) 90 { 91 int len[100]; 92 for (int i = 0; i < 100; i++) 93 { 94 len[i] = 0; 95 } 96 int count = 0; 97 for (int i = 0; i < 100; i++) 98 { 99 cin >> len[i]; 100 if (len[i] == -1) 101 { 102 break; 103 } 104 count++; 105 } 106 polygon p(count); 107 p.setlen(len); 108 p.display(); 109 } 110 if (judge == 1) 111 { 112 int h, w; 113 cin >> h >> w; 114 rectangle r(h, w); 115 r.display(); 116 } 117 if (judge == 2) 118 { 119 int n; 120 int l; 121 cin >> n >> l; 122 equal_polygon e(n, l); 123 e.display(); 124 } 125 } 126 return 0; 127 }标签:多边形,polygon,16,int,display,++,2023.5,打卡,100 From: https://www.cnblogs.com/lixinyao20223933/p/17400078.html