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