实验三多态性一、实验目的1)了解多态性的概念。2)掌握虚函数的定义和使用方法。3)掌握纯虚函数和抽象类的概念和用法。二、实验内容和步骤1、分析并调试下列程序,写出程序的输出结果,并解释输出结果。#include<iostrean>using nanespacestd;classBtpubiic:uirtual void f1(double x)1cout<<"B::f1(double)"<<x<<endl;7voidf2(double x)1cout<<"B::f2(double)"<<2*x<<endl;3uoid f3(double x)1cout<<"B::f3(double)"<<3*x<<endl;1>;classD:publicBSpublic:uirtual void f1(double x)1cout<<"D::f1(double)"<<x<<endl;1void f2(double x)Lcout<<"D::f2(double)"<<2*x<<endl;3voidf3(doublex)1cout<<"D::f3(double)"<<3*x<<endl;?1;15
15 实验三 多态性 一、实验目的 1)了解多态性的概念。 2)掌握虚函数的定义和使用方法。 3)掌握纯虚函数和抽象类的概念和用法。 二、实验内容和步骤 1、分析并调试下列程序,写出程序的输出结果,并解释输出结果
int nain()1D d;B *pb=&d;D *pd =&d;pb->f1(1.23);pd->f1(3.21);pb->f2(1.23);pd->f2(3.21);pb->f3(1.23);pd->f3(3.21);return o;72、给出下面的抽象基类container;class container1protected:double radius;public:container(double radius1);uirtual double surface_area()=0;uirtual doublevolune()=;1;要求建立3个继承container的派生类cube、sphere与cylinder,让每一个派生类都包含虚函数surface_areaO和volumeO,分别用来计算正方体、球体和圆柱体的表面积及体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。16
16 2、给出下面的抽象基类 container; 要求建立 3 个继承 container 的派生类 cube、sphere 与 cylinder,让每一个派生类都包含虚函数 surface_area()和 volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。要求写出主程序,应用 C++的多态性,分别计算边长为 6.0 的正方体、半径为 5.0 的球体,以及半径为 5.0 和高为 6.0 的圆柱体的表 面积和体积
实验四装运算符重载一、实验目的1)了解多态性的概念。2)掌握运算符重裁的基本方法。二、实验内容和步骤1、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在0~59,秒钟范围限制在0~59秒。[提示]时间类class Tine1public:Tine(int h=8,int n=8,int s=0);Time operator+ (Time&);uoid disptine(string);private:int hourse;int ninutes;int seconds;1;2、编写一个程序,用于进行集合的并、差和交运算。例如输入整数集合[954367]和[2469】,计算出它们进行集合的并、差和交运算后的结果。[提示]①可用以下表达式实现整数集合的基本运算:s1 + s22两个整数集合的并运算s1=s2两个整数集合的差运算s1 * s22两个整数集合的交运算②参考以下Set类的框架,用于完成集合基本运算所需的各项功能。17
17 实验四 运算符重载 一、实验目的 1)了解多态性的概念。 2)掌握运算符重载的基本方法。 二、实验内容和步骤 1、编写一个程序,其中设计一个时间类 Time,用来保存时、分、秒等私有数据成员,通 过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于 0,分钟范围 限制在 0~59,秒钟范围限制在 0~59 秒。 [提示] 时间类 2、编写一个程序,用于进行集合的并、差和交运算。例如输入整数集合{9 5 4 3 6 7}和{2 4 6 9 },计算出它们进行集合的并、差和交运算后的结果。 [提示] ① 可用以下表达式实现整数集合的基本运算: s1 + s2 两个整数集合的并运算 s1 - s2 两个整数集合的差运算 s1 * s2 两个整数集合的交运算 ② 参考以下 Set 类的框架,用于完成集合基本运算所需的各项功能
class setVpublic:set();void input(int d);int length();int getd(int i);uoid disp();(set s1);set operator+set operator-(set s1);set operator*((set s1);set operator=(set s1);protected:int len;int s[MAX];>;3、对于下面的类MyString,要求重载一些运算符后可以计算表达式:a=b+c;,其中a,b,c都是类MyString的对象。请重载相应的运算符并编写程序测试。classMyString( public:MyString(char *s)str=newchar[strlen(s)+1];strepy(str,s);1~MyStringOtdeletellstr;1private:char*str;3;4、定义一个名为Month的类,它是用于表示月份的一个抽象数据类型。这个类要用int类型的一个变量来表示一个月(1表1月,2表示2月,依次类推)。请包括以下所有成员函数:一个构造函数使用英文月份名称的前3个字母来设置月份名称,这3个字母要通过3个参数来接收:一个构造函数只接收一个int类型的参数,并用这个整数来设置月份:一个默认构造18
18 3、对于下面的类 MyString, 要求重载一些运算符后可以计算表达式:a=b+c;, 其中 a,b,c 都 是类 MyString 的对象。请重载相应的运算符并编写程序测 试。 class MyString{ public: MyString(char *s){ str=newchar[strlen(s)+1]; strcpy(str,s); } ~MyString(){ delete[] str; } private: char *str; }; 4、定义一个名为 Month 的类,它是用于表示月份的一个抽象数据类型。这 个类要用 int 类 型的一个变量来表示一个月(1 表 1 月,2 表示 2 月,依 次类推)。请包括以下所有成员函 数:一个构造函数使用英文月份名称的前 3 个字母来设置月份名称,这 3 个字母要通过 3 个参数来接收;一个构造函 数只接收一个 int 类型的参数,并用这个整数来设置月份;一个默认构造
函数;一个输入函数,它将月份作为整数来读取;一个输入函数,它将月份作为月份名称的前3个字母来读取;一个输出函数,它将月份作为一个整数来输出;一个输出函数,它将月份作为月份名称的前3个字母来输出;以及一个成员函数,它将下一个月作为Month类型的一个值来返回。输入和输出函数分别有一个用于流的形参。将类定义嵌入一个测试程序。5、重新定义编程项目2(上一个Month类)所描述的Month类的实现(如果是首次定义它,一定要像下面描述的那样实验)。这一次,请将月份作为char类型的3个成员变量来实现;这些成员变量分别存储了月份名称的前3个字母。将定义嵌入一个测试程序。6、定义一个复数类(复数由实部和虚部构成),编写程序重载四则运算符和++、一一运算符,实现复数的相关运算。19
19 函数;一个输入函数,它将月份作为整数来读取;一个输入函数,它将月份 作为月份名称的前 3 个字母来读取;一个输出函数,它将月份作为一个 整数来输出;一个输出函数,它将月份作为月份名称的前 3 个字母来输出; 以及一个成员函数,它将下一个月作为 Month 类型的一个值来返回。输入和 输出函数分别 有一个用于流的形参。将类定义嵌入一个测试程序。 5、重新定义编程项目 2(上一个 Month 类)所描述的 Month 类的实现(如 果是首次定义 它,一定要像下面描述的那样实验)。这一次,请将月份作为 char 类型的 3 个成员变量来 实现;这些成员变量分别存储了月份名称的前 3 个字母。将定义嵌入一个测试程序。 6、定义一个复数类(复数由实部和虚部构成),编写程序重载四则运算符和 ++、-运算符, 实现复数的相关运算