2021-04-12

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;

	}
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

md zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值