每日打卡-13

发布时间 2023-04-25 20:41:20作者: leapss

一.问题描述

定义shape类,无数据成员,包含两个纯虚函数成员void setvalues() 和float area() ,由shape类进行派生如下:

矩形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;

三角形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;

正方形类,包含一个数据成员变量用于描述边长,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;

圆形类,包含一个数据成员变量用于描述半径,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;

 

在主函数中定义相应的指针对象和普通对象,利用虚函数实现多态,依次分别输入矩形的底和高,三角形的底和高,正方形的边长,圆形的半径,若其中任何一个值小于等于0,则输出Set Value Error!,然后退出程序,对于之前已正确输入的数值计算相应形状的面积。

二.设计思路

三.流程图

四.伪代码 

1

五.代码实现 

1#include<iostream>
using namespace std;
#define PI 3.14
class shape {
public:
	virtual void setvalues() = 0;
	virtual float area() = 0;
};
class rectangle :public shape {
private:
	float wide, high;
public:
	void setvalues() {
		cin >> wide >> high;
		if (wide < 0 || high < 0) {
			cout << "Set Value Error!" << endl;
			_exit(0);
		}
	}
	float area() {
		float Area = wide * high;
		return Area;
	}
};
class triangle :public shape {
private:
	float wide, high;
public:
	void setvalues() {
		cin >> wide >> high;
		if (wide < 0 || high < 0) {
			cout << "Set Value Error!" << endl;
			_exit(0);
		}
	}
	float area() {
		float Area = wide * high / 2;
		return Area;
	}
}; 
class square :public shape {
private:
	float wide;
public:
	void setvalues() {
		cin >> wide ;
		if (wide < 0 ) {
			cout << "Set Value Error!" << endl;
			_exit(0);
		}
	}
	float area() {
		float Area = wide * wide;
		return Area;
	}
};
class circle :public shape {
private:
	float r;
public:
	void setvalues() {
		cin >> r;
		if (r < 0) {
			cout << "Set Value Error!" << endl;
			_exit(0);
		}
	}
	float area() {
		float Area = r * r * PI;
		return Area;
	}
};
int main() {
	rectangle a;
	triangle b;
	square c;
	circle d;
	shape* p;
	p = &a;
	p->setvalues();
	cout << p->area() << endl;
	p = &b;
	p->setvalues();
	cout << p->area() << endl;
	p = &c;
	p->setvalues();
	cout << p->area() << endl;
	p = &d;
	p->setvalues();
	cout << p->area() << endl;
	
}