posts - 296,comments - 1,views - 2928

一.问题描述

定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,输出它们的面积和。要求用基类指针数组,每一个数组元素指向一个派生类的对象。PI=3.14159f,单精度浮点数计算。

二.设计思路

三.流程图

四.伪代码 

1

五.代码实现 

#include<iostream>
#include<iomanip>
using namespace std;

class Shape
{
public:
	virtual double area() const = 0;
};

class Circle :public Shape
{
public:
	Circle(double r) :radius(r) { }
	virtual double area() const
	{
		return 3.14159 * radius * radius;
	}
protected:
	double radius;
};

class Square :public Shape
{
public:
	Square(double s) :side(s)
	{

	}
	virtual double area() const
	{
		return side * side;
	}
protected:
	double side;
};

class Rectangle :public Shape
{
public:
	Rectangle(double w, double h) :width(w), height(h)
	{

	}
	virtual double area() const
	{
		return width * height;
	}
protected:
	double width, height;
};

class Trapezoid :public Shape
{
public:
	Trapezoid(double t, double b, double h) :top(t), bottom(b), height(h)
	{

	}
	virtual double area() const
	{
		return 0.5 * (top + bottom) * height;
	}
protected:
	double top, bottom, height;

};

class Triangle :public Shape
{
public:
	Triangle(double w, double h) :width(w), height(h)
	{

	}
	virtual double area() const
	{
		return 0.5 * width * height;
	}
protected:
	double width, height;
};

int main()
{
	double a, b, c;
	cin >> a;
	Circle a1(a);
	cin >> a;
	Square a2(a);
	cin >> a >> b;
	Rectangle a3(a, b);
	cin >> a >> b >> c;
	Trapezoid a4(a, b, c);
	cin >> a >> b;
	Triangle a5(a, b);
	Shape* pt[5] =
	{
		&a1,&a2,&a3,&a4,&a5
	};
	double areas = 0.0;
	for (int i = 0; i < 5; i++)
	{
		areas = areas + pt[i]->area();
	}
	cout << fixed << setprecision(3) << areas << endl;
	return 0;
}

 

posted on   leapss  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示