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,歡迎來訪。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM