福 建 工 程 学 院
实 验 报 告
面向对象程序设计(C++)
专 业 电子信息工程 班 级 1303 座 号 姓 名 日 期 2015-11-26
实验五 多态程序设计
一、 实验目的:
理解运算符重载的概念和实质,掌握运算符重载函数 的定义方法,掌握运算符重载为类的成员函数的方法。
掌握虚函数的定义方法及其在实现多态性中的应用,理解静态连编和动态链编的区别。 二、 实验时间:2015-11-26 三、 实验地点:-- 四、 实验内容:
1.已知基类:
class Base{
public : virtual void iam() {cout<<”Base”< (1)从Base类中派生出两个类,分别定义iam()函数,实现输出自己类名的功能。 (2)main函数中完成两项操作: ? 分别创建3个类的对象来调用iam()函数; ? 定义3个类的对象指针,将指向派生类的对象的指针赋值给Base *指针,而后 通过这些指针调用iam()函数。 #include class Base1 : public Base { public: }; class Base2 : public Base { public: }; int main() { Base b; Base1 b1; void iam() { } cout<<\< cout<<\< cout<<\< } Base2 b2; Base *ptr[3] = {&b,&b1,&b2}; for(int i=0;i<3;i++) ptr[i]->iam(); return 0; 2. 编写程序,写一个Shape抽象类,该类有求表面积(get_surface)和体积(get_volume)两个纯虚函数;由该类派生出圆柱体Cylinder,球体(Sphere),正方体(Cube),计算圆柱体,球体,正方体的表面积和体积。要求用抽象类实现。 #include virtual double get_surface()=0; virtual double get_volume()=0; }; class Cylinder : public Shape { public: Cylinder(double h,double r) : height(h),radius(r) { } double get_surface() { } double get_volume() { } private: double height,radius; }; class Sphere : public Shape { public: Sphere(double r) : radius(r) { } double get_surface() { } double get_volume() { } private: return 4.0/3.0*PI*radius*radius*radius; return 4*PI*radius*radius; cout<<\球的半径为:\< return 2*PI*radius*radius + 2*PI*radius*height; cout<<\圆柱的底面半径为:\< double radius; }; class Cube : public Shape { public: Cube(double l) : length(l) { } double get_surface() { } double get_volume() { } private: double length; }; int main() { Cylinder cy(5,2); cout<<\圆柱的表面积为:\< cout<<\球的表面积为:\< cout<<\正方体的表面积为:\< return length*length*length; return 6*length*length; cout<<\正方体的边长为:\< 3.在上题中,继续完善Cube类,对运算符+重载,使得+运算符可以实现两个正方体的相加(即边长的相加,可通过display函数显示加后的立方体的体积及表面积)。 #include virtual double get_surface()=0; virtual double get_volume()=0; }; class Cylinder : public Shape { public: Cylinder(double h,double r) : height(h),radius(r) { } cout<<\圆柱的底面半径为:\< double get_surface() { } double get_volume() { } private: double height,radius; }; class Sphere : public Shape { public: Sphere(double r) : radius(r) { } double get_surface() { } double get_volume() { } private: double radius; }; class Cube : public Shape { public: Cube(double l) : length(l) { } double get_surface() { } double get_volume() { } Cube operator+(const Cube &c) { } private: double length; }; void display(Cube cc) { cout<<\相加后正方体的表面积为:\< length += c.length; return Cube(length); return length*length*length; return 6*length*length; cout<<\正方体的边长为:\< cout<<\球的半径为:\< return 2*PI*radius*radius + 2*PI*radius*height;