7-2 多边形周长计算(继承) (50 分)
给出下面的多边形基类框架: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为等边多边形,后面跟随两个数字为等边多边形的边数和边长。输入样例:30 32 54 76 88 24 -11 32 542 3 32输出样例:5 2744 1723 96
//当显示错误link2001时,可能是因为构造函数函数未定义,需要加{}(●°u°●) 」
#include
using namespace std;
class polygon
{
protected:
int number;//边数
private:
int side_length[100];//变长组数
public:
polygon()
{}
polygon(int num, int* len);
int perimeter();//计算多边形边长
void display();//输出多边形边数和周长
};
polygon::polygon(int num, int* len)
{
number = num-1;
int i;
for (i = 0; i < num-1; i++)
{
side_length[i] = len[i];
}
}
int polygon::perimeter()
{
int sum=0;
int i;
for (i = 0; i < number; i++)
{
sum = side_length[i]+sum;
}
return sum;
}
void polygon::display()
{
cout << number <<" " << perimeter();
}
class rectangle :public
polygon
{
public:
int height;
int width;
rectangle();
rectangle(int h, int w);
int perimeter();//计算矩形边长
void display();//输出矩形边数和周长
};
rectangle::rectangle(int h, int w)
{
height = h;
width = w;
}
int rectangle::perimeter()
{
int sum;
sum = (height + width) * 2;
number = 4;
return sum;
}
void rectangle::display()
{
cout << number <<" " <<perimeter();
}
class equal_polygon :public
polygon
{
public:
int side_len;
equal_polygon();
equal_polygon(int s, int n);
int perimeter();
void display();
};//等边多边形
equal_polygon::equal_polygon(int s, int n)
{
side_len = s;
number = n;
}
int equal_polygon::perimeter()
{
int sum;
sum = side_len * number;
return sum;
}
void equal_polygon::display()
{
cout <<number<< perimeter();
}
int main()
{
int num;//多边形个数
int i;//用于表示类型
int height, width;
int len[100], k = 0, le = 1;//用于计算多边形
int num1, l;//等边多边形边数+边长
cin >> num;//cin>>len会出现错误
while (num--)//注意用n--:表示的是先进行while里的运算再--而用--n则是先进行--再进行while里的运算;
{
cin >> i;
switch (i)//在这用的case没有用if显示case跳过当显示初始化操作由case标签跳过时,需要忘case后加{}(●°u°●) 」
{
case 0: {while (le != -1)
{
cin >> le;
len[k++] = le;
}
polygon c(k, len);//当显示没有与参数列表匹配的构造函数时可能是所有参数中任意一个有错误
c.display(); }
break;
case 1: {cin >> height >> width; rectangle a(height, width); a.display(); }break;
case 2: {cin >> num1 >> l; equal_polygon b(num1, l); b.display(); }break;
}
}
}