一.问题描述
定义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;
}