23.试定义类TR1(三角形)及其派生类COL(三角柱体)。其中三角形类可以计算三角形的面积和周长;三角柱体类可以计算柱体的体积和表面积。具体要求如下:
- TRI 的成员如下:
私有数据成员:
- double x,y,z; 分别表示三角形三条边的长度
公有成员函数:
- TRI(double x1,double y1,double z1);构造函数,用 x1,y1,z1 分别初始化三角形的三条边。
- virtual double area(); 虚函数,计算三角形的面积,计算公式为:
面积= 根号[s*(s - x)(s - y)(s - z)] ,其中, x、 y、 z 分别为三角形三条边的长度, s=(x+y+z)/2。 - double peri(); 计算三角形的周长。
- 类COL为类TR1的公有派生类,其成员如下:
私有数据成员
- double height; 表示三角柱体的高度。
公有成员函数
- COL(double x1,double y1,double z1,double h) ;构造函数,用 h 初始化 height,用 x1、 y1、 z1 分别初始化基类的成员 x、 y、 z。
- double volume();计算三角柱体的体积。计算公式:体积=底面积×高,其中底面积通过调用基类的成员函数 area()计算。
- double area();计算三角柱体的表面积。计算公式:表面积=2×底面积+底面周长×高度,其中底面积和底面周长分别通过调用基类的成员函数 area()和 prei()计算。
- 在主函数中, 创建一个 COL 对象 co 和一个 TR1 指针*tr,并将 tr 指向 co。通过 co 调用 volume(),计算并输出三角柱体的体积;通过 tr 调用 area(),计算并输出三角柱体的表面积。(必须先判断 x1、 y1、 z1 能否构成三角形,如果不能构成三角形,则给出提示并退出程序。判断三条边是否构成三角形的方法:任意两边之和大于第三边)
#include<iostream>
#include<cmath>
using namespace std;
class TRI{
double x,y,z;
public:
TRI(double x1,double y1,double z1):x(x1),y(y1),z(z1){}
virtual double area(){
double s=(peri())/2;
return sqrt(s*(s-x)*(s-y)*(s-z));;
}
double peri(){
return x+y+z;
}
};
class COL:public TRI{
double height;
public:
COL(double x1,double y1,double z1,double h):TRI(x1,y1,z1),height(h){}
double volume(){
return TRI::area()*height;
}
double area(){
return TRI::area()*2+peri()*height;
}
};
int main(){
int x,y,z,h;
cout<<"please intput x y z h:"<<endl;
cin>>x>>y>>z>>h;
while(!(x+y>z&&y+z>x&&z+x>y)){
cout<<"please intput x y z h again:"<<endl;
cin>>x>>y>>z>>h;
}
COL c(x,y,z,h);
TRI *p=&c;
cout<<"volume:"<<c.volume()<<endl;
cout<<"area:"<<p->area()<<endl;
return 0;
}