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,欢迎来访。

posted @ 2020-05-27 21:49  Colourso  阅读(1015)  评论(0编辑  收藏  举报