【id:64】【20分】C. 图形面积(虚函数与多态)

题目描述

编写一个程序,定义抽象基类Shape,在Shape类中定义虚函数area();由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。用虚函数分别计算几种图形面积。

1、要求输出结果保留两位小数。

2、要求用基类指针数组,使它每一个元素指向每一个派生类对象。

输入

测试数据的组数 t

第一组测试数据中圆的半径

第一组测测试数据中正方形的边长

第一组测试数据中矩形的长、宽

.......

第 t 组测试数据中圆的半径

第 t 组测测试数据中正方形的边长

第 t 组测试数据中矩形的长、宽

输出

第一组数据中圆的面积

第一组数据中正方形的面积

第一组数据中矩形的面积

......

第 t 组数据中圆的面积

第 t 组数据中正方形的面积

第 t 组数据中矩形的面积


2
1.2
2.3
1.2 2.3
2.1
3.2
1.23 2.12
 


4.52
5.29
2.76
13.85
10.24
2.61
 

#include  
#include
using namespace std;
//编写一个程序,定义抽象基类Shape,在Shape类中定义虚函数area();
//由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。用虚函数分别计算几种图形面积。
class Shape {
	virtual double area() = 0;//virtual 虚函数
	//子类和父类中的虚函数拥有相同的名字,返回值,参数列表,那么称子类中的虚函数重写了父类的虚函数,或者叫做覆盖。
};
//派生类
class Circle :public Shape {
	double r;
public:
	Circle(double R) :r(R) {}//初始化
	double area() {
		return 3.14 * r * r;
	}

};

class Square :public Shape {
	double d;
public:
	Square(double D) :d(D) {}
	double area() {
		return d * d;
	}
};

class Rectangle :public Shape {
	double a, b;
public:
	Rectangle(double A, double B) :a(A), b(B) {}
	double area() {
		return a * b;
	}

};
int main() {
	int t;
	cin >> t;
	while (t--) {
		double r, d, a, b;
	 /*    	第一组测试数据中圆的半径
			第一组测测试数据中正方形的边长
			第一组测试数据中矩形的长、宽
	*/	cin >> r >> d >> a >> b;
		Circle c(r);	//第一组测试数据中圆的半径
		Square s(d);//第一组测测试数据中正方形的边长
		Rectangle re(a, b);//第一组测试数据中矩形的长
		cout << setiosflags(ios::fixed) << setprecision(2) << c.area() << endl;
		cout << setiosflags(ios::fixed) << setprecision(2) << s.area() << endl;
		cout << setiosflags(ios::fixed) << setprecision(2) << re.area() << endl;
	}
	return 0;
}

你可能感兴趣的:(oj,c++,c语言,算法,开发语言)