实验5 多态性
1.实验目的和要求:
(1)理解多态性、虚拟函数、抽象类和具体类、静态绑定和动态绑定等概念 (2)学会利用虚函数来实现多态性,以便更好地来扩展和维护系统 (3)理解C++如何实现虚拟函数和动态绑定(*) 2.实验内容:
(1) 以下是一个计算正方体、球体和圆柱体的面积和体积的程序。试分析程序 并写出程序的运行结果,然后上机运行验证。 #include
double radius; public:
container(double radius) {
container::radius=radius; }
virtual double surface_area()=0; virtual double volume()=0; };
class cube:public container { public:
cube(double radius):container(radius){}; double surface_area() {
return radius*radius*6;
}
double volume() {
return radius*radius*radius; } };
class sphere:public container { public:
sphere(double radius):container(radius){}; double surface_area() {
return 4*3.1416*radius*radius; }
double volume() {
return 3.1416*radius*radius*radius*4/3; } };
class cylinder:public container {
double height; public:
cylinder(double radius,double height):container(radius) {
cylinder::height=height; }
double surface_area() {
return 2*3.1416*radius*(height+radius);
}
double volume() {
return 3.1416*radius*radius*height; } }; void main() {
container *p; cube obj1(10); sphere obj2(6); cylinder obj3(4,5); p=&obj1;
cout<<\输出结果:\
cout<<\正方体表面积:\cout<<\正方体体积:\p=&obj2;
cout<<\球体表面积:\cout<<\球体体积:\p=&obj3;
cout<<\圆柱体表面积:\cout<<\圆柱体体积:\}
(2)实现下图中的Shape层次结构。每个TwoDimensionalShape类应包括成员函数getArea,以计算二维图形的面积。每个ThreeDimensionalShape类包含成员函数getArea和getVolume,分别计算三维图形的表面积和体积。编写一个程序,使用层次结构中每个具体类的对象的Shape向量指针。程序要打印出向量元素所指的对象。同样,再将所有形状存入向量的循环中,要能判断每个图形到底属于TwoDimensionalShape还是属于ThreeDimenionalShape。如果某个图形是TwoDimensionalShape就显示其面积,如果某个图形是ThreeDimenionalShape,则显示其面积和体积。
Shape TwoDimensionalShape ThreeDimensionalShape Circle Triangle Square Sphere Cube
(3)编写一个程序,先设计一个链表List类,再从链表类派生出一个集合类Set类,再集合类中添加一个记录元素个数的数据项。要求可以实现对集合的插入、删除、查找和显示。 3.结合上机体会,回答下列问题
(1)多态性是如何让程序“普遍化”而非“特殊化”的?试说明程序“普遍化”的主要好处。
(2)什么是虚拟函数?请说明虚拟函数适用的环境。 (3)多态性是如何提高可扩展性的?
(4)说出静态绑定和动态绑定的区别,并试解释说明动态绑定究竟是如何实现的?
实验6 IO流上机实验
1. 实验目的和要求
(1) 理解I / O流与标准流对象的意义 (2) 掌握常用的IO 成员函数: (3) 掌握文件的基本操作
(4) 理解二进制文件与文本文件的区别 (5) 熟练掌握文件的顺序读写方法 (6) 熟练掌握文件的随机读写方法
2. 实验内容:
(1) 由希腊著名数学家埃拉托色尼提出求解素数的“筛选法”,
1)阅读程序改正其中的错误,使其能输出100以内的所有素数。 2)改写该程序,将1~ Num以内的所有素数按清晰的格式写入文件中。
3)从文件中读出n~m(1
int main() {
const int MAX= 100; bool isPrime[MAX];
for(int i=0; i isPrime[0]=isPrime[1]=false; //1和0不是素数 isPrime[i]=true;