实验目的:
1.先建立一个Point(点)类,包含数据成员x, y(坐标点)
2.以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径);
3.再以Circle类为直接基类,派生出一个Cyinder(圆柱体)类,再增加数据成员h(高),要求编写程序,设计出各类中基本的成员函数(包括构造函数、构析函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运载符“<<”函数等),使之能用于处理以上类对象,最后求出圆柱体的表面积、体积并输出。
实验代码:
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
Point(double xx, double yy){x = xx, y = yy;}
void display(){cout << "圆心: " << "(" << x << ", " << y << ")" << endl;}
~Point(){}
protected:
double x;
double y;
};
class Circle:public Point
{
public:
Circle(double xx, double yy, double r):Point(xx, yy)
{
R = r;
}
void show()
{
display();
cout << "半径:" << R << endl;
}
double back()
{
return R;
}
~Circle(){}
private:
double R;
};
class Cylinder:public Circle
{
public:
Cylinder(double xx, double yy, double r, double h):Circle(xx, yy, r)
{
H = h;
}
friend ostream & operator << (ostream & output, Cylinder & c)
{
output << c.show_all() << endl;
output << c.show_area() << endl;
output<< c.show_vilume() << endl;
return output;
}
double show_all()
{
show();
cout << "高:";
return H;
};
~Cylinder(){}
double show_area()
{
cout << "圆柱体的表面积为: ";
return 2 * 3.14 * pow(back(), 2) + 2 * 3.14 * back() * H;
}
double show_vilume()
{
cout << "圆柱体的体积为: ";
return 3.14 * pow(back(), 2) * H;
}
private:
double H;
};
int main()
{
Cylinder c(0, 0, 1, 1);
cout << c;
cout << endl;
double x, y ,r , h;
cout << endl;
while(1)
{
cout << "请输入您想录入的圆柱体的基本数据,包括圆心位置, 半径, 高:" << endl;
cout << "直到录入数据都为0时结束" << endl;
cin >> x >> y >> r >> h;
Cylinder c1(x, y, r, h);
if(x == 0 || y == 0 || r == 0 || h == 0)
break;
else
{
cout << c1;
cout << '\n' << endl;
}
}
system("pause");
return 0;
}
实验结果截图:
请输入您想录入的圆柱体的基本数据,包括圆心位置, 半径, 高:
直到录入数据都为0时结束
1 1 1 1
圆心: (1, 1)
半径:1
高:1
圆柱体的表面积为: 12.56
圆柱体的体积为: 3.14
请输入您想录入的圆柱体的基本数据,包括圆心位置, 半径, 高:
直到录入数据都为0时结束
1 2 3 4
圆心: (1, 2)
半径:3
高:4
圆柱体的表面积为: 131.88
圆柱体的体积为: 113.04
请输入您想录入的圆柱体的基本数据,包括圆心位置, 半径, 高:
直到录入数据都为0时结束
0 0 0 0
请按任意键继续. . .
实验心得:
实验考察多重派生类的构造函数,老师其实很慈悲,今周给的实验课本上都有很好的模板,这个实验当然也不例外,课本上也有类似的例题,难点都是一些技术性的问题,看好课本倒是都能很好的解决,所以啦,综上所述,就没什么可以说的,回归课本就好。
其次的就是一些小的知识点了,比如,新数据的录入,用到了一个小的技巧,while(1),还有,“<<”运载符的重载,这些知识,以前的实验中都有涉及,应该可以很好的解决的。
总的来说,大体结构课本上有好的模板,其次,知识比较琐碎,但是分步骤,一点一点实现代码功能的方式还是很有优越性的,用这种方法,逐步实现代码就好。