实验3 多态性
实验课程名:面向对象程序设计(C++方向) 专业班级: 学号: 姓名:
实验时间: 实验地点: 指导教师:
一、实验目的和要求 (1) 了解多态性的概念。 (2) 掌握运算符重载的基本方法。 (3) 掌握虚函数的定义和使用方法。 (4) 掌握纯虚函数和抽象类的概念和用法。 二、实验内容 1.分析并调试下列程序,写出程序的输出结果,并解释输出结果。 //test5_1.cpp #include using namespace std; class B{ public: virtual void f1 (double x) {cout<<”B::f1(double)”<f1(1.23); pb->f1(1.23); pb->f2(1.23); pb->f3(1.23); pb->f3(3.14); return 0; } 答: 因为都是通过类D定义的指针pb,当pb->f1(1.23),因为在基类中函数f1()为虚函数,所以在pb->f1(1.23)时,调用的是类D中的虚函数f1(),所以会输出D::f1(),因为函数f2(),f3()在基类中并没有定义为虚函数,所以当pb->f2(),pb->f3()时实际上调用的是基类B中的函数,即输出B::f2(),B::f3(); 2.编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在0~59,秒钟范围限制在0~59秒。 【提示】 时间类Time{ public: Time(int h=0,int m=0,int s=0); Time operator+(Time&); void disptime(string); private: int hourse; int minutes; int seconds; }; 程序代码: #include #include using namespace std; class Time { public: Time(int h=0,int m=0,int s=0); Time operator+(Time&); void disptime(string); private: int hourse; int minutes; int seconds; }; Time::Time(int h,int m,int s) { if(h>=0&&m>=0&&m<59&&s>=0&&s<59) { hourse=h; minutes=m; seconds=s; } } Time Time :: operator+(Time &x) { Time c; int p,q; c.hourse=hourse+x.hourse; c.minutes=minutes+x.minutes; c.seconds=seconds+x.seconds; while(c.seconds>59) { p=c.seconds/60; c.minutes=c.minutes+p; c.seconds=c.seconds-p*60; } while(c.minutes>59) { q=c.minutes/60; c.hourse=c.hourse+q; c.minutes=c.minutes-q*60; } return c; } void Time::disptime(string n) { cout< using namespace std; class container { protected: double radius; public: container(double radius1); virtual double surface_area()=0; virtual double volume()=0; }; container::container(double radius1) { radius=radius1; } // 正方体 class cube: public container { public: cube(double radius1):container(radius1){} double surface_area(); double volume(); }; double cube::surface_area() { double area; area=radius*radius*6; return area; } double cube::volume() { double V; V=radius*radius*radius; return V; } //球体 class sphere: public container { public: sphere(double radius1):container(radius1){} double surface_area(); double volume(); }; double sphere::surface_area() { double area; area=4*3.14*radius*radius; return area; } double sphere::volume() { double V; V=4*3.14*radius*radius*radius/3; return V; } //圆柱体 class cylinder:public cube { public: cylinder(double radius1,double radius2):cube(radius1) { radiu=radius2; } double surface_area(); double volume(); protected: double radiu; }; double cylinder::surface_area() {
本文来源:https://www.bwwdw.com/article/vcyd.html