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