zoukankan      html  css  js  c++  java
  • C++面向对象练习(三)—— 继承的简单练习

    概览:C++面向对象练习:继承。

    本文首发于我的个人博客www.colourso.top,欢迎来访。

    代码全部运行于VS2019

    博客后续会持续更新补充。

    题目

    试定义类TRI (三角形)及其派生类COL (三角柱体)。其中三角形类可以计算三角形的面积和周长;三角柱体类可以计算柱体的体积和表面积。具体要求如下:

    (1) TRI的成员如下:

    • 私有数据成员

      • double x,y,z;分别表示三角形三条边的长度
    • 公有成员函数

      • TRI (double x1,double y1,double z1);构造函数,用x1,y1,z1 分别初始化三角形的三条边。在初始化之前,必须先判断x1、y1、 z1能否构成三角形,如果不能构成三角形,则给出提示并退出程序。判断三条边是否构成三角形的方法:任意两边之和大于第三边。
      • virtual double area();虚函数,计算三角形的面积.计算公式为:面积=[s(s-x)(s-y)*(s-z)]^0.5.其中,x、y、z分别为三角形三条边的长度,s= (x+y+z)/2。
      • double peri(); 计算三角形的周长。

    (2)类COL为类TRI的公有派生类,其成员如下:

    • 私有数据成员
      • double height;表示三角柱体的高度。
    • 公有成员函数
      • COL (double x1,double y1,double z1,double h);构造函数,用h初始化height,用x1、y1、z1分别初始化基类的成员x、y、z。
      • double volume();计算三角柱体的体积。计算公式:体积=底面积X高,其中底面积通过调用基类的成员函数area()计算。
      • double area();计算三角柱体的表面积。计算公式:表面积=2X底面积+底面周长X高度,其中底面积和底面周长分别通过调用基类的成员函数area()和prei()计算。

    (3)在主函数中,创建一个COL对象co和一个TRI指针*tr,并将tr指向co。通过co调用volume(),计算并输出三角柱体的体积;通过tr调用area(), 计算并输出三角柱体的表面积。

    题目来源与参考链接:C++面向对象程序设计50道编程题(第23题)

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    class TRI
    {
    public:
        TRI(double x1, double y1, double z1);
        double peri();          //计算周长
        virtual double area();  //计算面积
    private:
        double x, y, z;
    };
    
    class COL:public TRI
    {
    public:
        COL(double x1, double y1, double z1, double h);
        double volume();    //计算体积
        double area();      //计算面积
    private:
        double height;
    };
    
    TRI::TRI(double x1, double y1, double z1)
    {
        if (x1 + y1 <= z1)
        {
            cout << "无法构成三角形!" << endl;
            exit(0);
        }
    
        this->x = x1;
        this->y = y1;
        this->z = z1;
    }
    
    double TRI::peri()
    {
        return x+y+z;
    }
    
    double TRI::area()
    {
        double s = (x+y+z)/2;
        double areas = sqrt(s*(s-x)*(s-y)*(s-z));
        return areas;
    }
    
    COL::COL(double x1, double y1, double z1, double h):TRI(x1, y1, z1)
    {
        this->height = h;
    }
    
    double COL::volume()
    {
        double are = TRI::area();
        double vol = are * height;
        return vol;
    }
    
    double COL::area()
    {
        double are = TRI::area();
        double oth = TRI::peri()*height;
        are = 2 * are + oth;
        return are;
    }
    
    int main()
    {
        double x, y, z, h;
        cout << "请输入三角锥的底边三边长和高:" << endl;
        cin >> x >> y >> z >> h;
        COL co(x,y,z,h);
        TRI* tr = &co;
    
        cout << "三角锥的体积: ";
        cout << co.volume() << endl;
    
        cout << "三角锥的表面积: ";
        cout << tr->area() << endl;
    }
    

    本文首发于我的个人博客www.colourso.top,欢迎来访。

  • 相关阅读:
    Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
    CentOS7.7 yum安装新版git
    CentOS使用epel安装不同版本php-fpm
    ubuntu16.04安装mysql5.6
    阿里云Confluence无法发送邮件修复
    windowserver 2012安装openssh
    linux增加history时间戳
    SQL Server 2008R2各个版本,如何查看是否激活,剩余可用日期?
    nginx增加访问验证
    mysql5.6和5.7的权限密码设置
  • 原文地址:https://www.cnblogs.com/colourso/p/12774446.html
Copyright © 2011-2022 走看看