C++面向对象练习(三)—— 继承的简单练习

本文最后更新于:2020年4月25日 晚上

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


代码全部运行于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题)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!