C++面向对象编程题 第23题

23.试定义类TR1(三角形)及其派生类COL(三角柱体)。其中三角形类可以计算三角形的面积和周长;三角柱体类可以计算柱体的体积和表面积。具体要求如下:
  1. 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(); 计算三角形的周长。
  1. 类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()计算。
  1. 在主函数中, 创建一个 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;
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值