定义shape类,无数据成员,包含两个纯虚函数成员void setvalues() 和float area() ,由shape类进行派生如下:
矩形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
三角形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
正方形类,包含一个数据成员变量用于描述边长,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
圆形类,包含一个数据成员变量用于描述半径,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
在主函数中定义相应的指针对象和普通对象,利用虚函数实现多态,依次分别输入矩形的底和高,三角形的底和高,正方形的边长,圆形的半径,若其中任何一个值小于等于0,则输出Set Value Error!,然后退出程序,对于之前已正确输入的数值计算相应形状的面积。
【输入形式】
矩形的底和高
三角形的底和高
正方形的边长
圆形的半径
【输出形式】
矩形面积
三角形面积
正方形面积
圆形面积
代码如下:
#include<iostream>
#include<string>
using namespace std;
class shape
{
public:
virtual void setvalues(float a=0,float b=0)=0;
virtual float area()=0;
};
class rectangle:public shape
{
private:
float di,high;
public:
void setvalues(float a,float b)
{
di=a;
high=b;
}
float area()
{
return di*high;
}
};
class rectriangle:public shape
{
private:
float di,high;
public:
void setvalues(float a,float b)
{
di=a;
high=b;
}
float area()
{
return (di*high)/2;
}
};
class square:public shape
{
private:
float bian;
public:
void setvalues(float a,float b)
{
bian=a;
}
float area()
{
return bian*bian;
}
};
class round:public shape
{
private:
float r;
public:
void setvalues(float a,float b=0)
{
r=a;
}
float area()
{
return 3.1415*r;
}
};
int main()
{
float di,high;
float d,h;
float a;
float r;
cin>>di>>high>>d>>h>>a>>r;
shape *p;
rectangle j;
rectriangle s;
square z;
round y;
p=&j;
if(di<0||high<0)
{
cout<<"Set Value Error!"<<endl;
exit(0);
}
p->setvalues(di,high);
cout<<p->area()<<endl;
p=&s;
if(d<0||h<0)
{
cout<<"Set Value Error!"<<endl;
exit(0);
}
p->setvalues(d,h);
cout<<p->area()<<endl;
p=&z;
if(a<0)
{
cout<<"Set Value Error!"<<endl;
exit(0);
}
p->setvalues(a);
cout<<p->area()<<endl;
p=&y;
if(r<0)
{
cout<<"Set Value Error!"<<endl;
exit(0);
}
p->setvalues(r);
cout<<p->area()<<endl;
return 0;
}
标签:di,float,shape,high,形状,setvalues,public
From: https://www.cnblogs.com/pinganxile/p/17342179.html