C+综合实验四_第1页
C+综合实验四_第2页
C+综合实验四_第3页
C+综合实验四_第4页
C+综合实验四_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计语言实验报告实验序号:04实验项目名称:面向对象的程序设计学号姓名专业、班实验地点文波楼219指导教师时间2012/12/19一、实验目的及要求1. 掌握类和对象的定义2. 掌握面向对象的程序设计方法3. 掌握类的继承与派生4. 掌握基类和虚函数的用法5. 掌握运算符重载的方法6. 掌握I/O流类的操作二、实验设备(环境)及要求1. 软件需求:Visual C+ 6.02. 硬件需求:Pentium III 450以上的CPU处理器,64MB以上的存,200MB的自由硬盘空 间三、实验容与步骤1.设计员工类Employee (静态数据成员)分a)题目描述定义一个描述员工(Employe

2、e)基本情况的类,数据成员包括编号(num)、(name)、 性别(sex)、工资(wage)、人数(count)、总工资(totalWage)。其中定义为长度 为18的字符数组,性别定义为长度为3的字符数组,其它数据类型为整型,总工资和人数为静态数据成员,函数成员包括构造函数、显示基本函数(ShowBase)和显示静态数据函数(ShowStatic),其中构造函数由已知参数编号(nu),(nm)、性别(sx)和工资(wg )构造对象,显示基本数据函数用于显示学生的编号、性别和工资,显示静态数据函数为静态成员函数,用于显示人数和总工资;要求所有数据成员为protected访问权限,所有成员函数

3、为public访问权限,在主函数中定 义若干个员工对象,分别显示员工基本信息,以及显示员工人数和总工资。b)输入描述第一行要求输入一个小于10的数字n,表示即将录入的员工数量,换行后从键盘录入每个员工的数据,依次是编号,性别,工资,每个员工占一行c)输出描述第一行显示 人数:”,第二行显示 总工资:”,后面分别显示每个员工的信息,每 个员工之间空一行d)样例输入21008 三男 25001009 四女 2600e)样例输出人数:2总工资:5100元个人基本信息:编号:1008性别:男工资:2500个人基本信息:编号:1009:四性别:女工资:26002.日期类Date的设计(构造函数)a)题目

4、描述定义一个日期类 Date,能提供和设置由年、月、日组成的日期。编写程序,提供 类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:yyyy-mm-ddb)输入描述初始化日期类Date对象的数据,分别是年、月、日。程序有多个测试用例。c) 输出描述按照指定格式输出的日期。d) 样例输入2010 12 302012 18 302012610e) 样例输出2010-12-30ERROR DATE2012-06-103. 复数类Imaginary (友元函数)a) 题目描述根据以下主函数的功能来设计复数类Imag in ary,使其能正确运行。类

5、Imagi nary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“ab格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。int mai n()float x1,y1,x2,y2;cinx1y1x2y2;/输入4个数据,分别表示进行运算的两个复数的实部和虚部Imaginary imag1(x1,y1),imag2(x2,y2);/用 x1、y1 创建 Imaginary 类对象 imag1Add(imag1,imag2);/调用友元函数求两个复

6、数之和,按a ibi的格式显示运算结果(a和b均为实数)Sub(imag1,imag2);/求两个复数之差并显示运算结果return 0;b) 输入描述输入4个数据,分别表示进行运算的两个复数的实部和虚部c) 输出描述2行,分别显示两个复数进行加、减运算的结果d) 样例输入1 3 2 5e) 样例输出3+8i-1-2i4.二进制类(1)运算符重载a)题目描述将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,

7、系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换。两个重载运算符“ +;-”,用来完成两个二进制数之间的加减运算。class binary II定义二进制类char bits16;II二进制字模数组public:bin ary(char *);字符串参数构造函数bin ary(i nt);II整型参数构造函数friend binary operator +(b in ary,b in ary);II 重载 “ +”friend binary operator -(b in ary,b in ary);重载 -”operator in t();类类型转换函数void p

8、rin t();主函数设计如下:int mai n()bi nary n仁1011;bi nary n 2=i nt(n 1)+15;binary n3=n 1-b in ary(7);nl.pri nt();n2.pri nt();n3.pri nt();cout int(n 2)+5e ndl;cout n 2-b in ary(5)e ndl;cout n 3+b in ary(5)e ndl;cout int(n 3)-545561173828739=7462590492315307=e)样例输出4322117856844010110四、实验结果与数据处理第一题/文件名:hp/功能:设

9、计员工类Employee (静态数据成员)/ 完成时间:2012-12-13#i nclude #in clude using n amespace std;class Employeeprotected:int nu m,wage;static int count;static int totalWage;char name18,sex3;public:Employee nt nu ,char* nm ,char*sx,i nt wg);Employee();Employee();ShowBase();static int ShowStatic();;Employee:ShowBase()c

10、outn个人基本信息:;coutn 编号:num;coutn : n ame;coutn 性别:sex; coutn 工资vvwagevvendl;Employee:ShowStatic()coutn 人数:countendl;cout总工资:vvtotalWagevv元endl; return totalWage;int Employee:co un t=0;int Employee:totalWage=0;Employee:Employee(i nt nu ,char* nm ,char*sx,i nt wg) num=nu; wage=wg; strcpy( name ,nm);strc

11、py(sex,sx);+co unt; totalWage+=wg;Employee:Employee()int main()int n; cinn;Employee *m=new Employee n;int nu ,wg;char nm18,sx3;for(int i=0;inunm sxwg; mi=Employee( nu, nm ,sx,wg);Employee:ShowStatic();for(i=0;iuc第二题/文件名:CC/功能:日期类Date的设计(构造函数)/ 完成时间:2012-12-13#i nclude #i nclude using n amespace std;

12、class dateprotected:int y,m,d;static int x;public:date(i nt y,i nt m,i nt d);date();date();void display(i nt y,i nt m,i nt d);static int getx();int date:x=1;int date:getx()return x;void date:display(i nt y,i nt m,i nt d)coutvyvv-vsetw (2)vsetfill(0)vvmvv-vvsetw (2) vvsetfill(O)v12)coutERROR DATEe nd

13、l; x=0;if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)if(d31)coutERROR DATE29)coutERROR DATE28)coutERROR DATE30)coutERROR DATEe ndl;x=0;int main()int y,m,d;int k;ciny md;date A;date(y,m,d); k=A.getx();if(k)A.display(y,m,d);return 0;00d 2. 2?004-02-39 t*ess any key to continue第三题/文件名:g4/功能:复数类Imaginary (友元函数)/ 完成时

14、间:2012-12-14#i nclude using n amespace std;class Imag inaryprivate:float a,b;public:Imagi nary()a=0,b=0;Imag in ary(float i,float j);Imagi nary();friend Imaginary Add(Imaginary&A,Imaginary&B); friend Imaginary Sub(Imaginary&A,Imaginary&B); void prin t()if(a=0)if(b=0)coutae ndl;elsecoutbi0)coutv+vvbv

15、vivve ndl;elseif(b=O)coute ndl;elsecoutbi x1y1x2y2;Imaginary imag1(x1,y1),imag2(x2,y2);Add(imag1,imag2);Sub(imag1,imag2);return 0;第四题/文件名:g4/功能:二进制类(1)运算符重载/ 完成时间:2012-12-14#i nclude #include class binary定义二进制类char bits16;二进制字模数组public:bin ary(char *);/字符串参数构造函数bin ary(i nt);/整型参数构造函数frie nd binary

16、operator +(b inary & ,bi nary &);/ 重载+frie nd binary operator -(bi nary& ,bi nary& );/ 重载-operator in t(); /类类型转换函数 void prin t();bin ary:b in ary(char *a)int m=strle n(a)-1;int n=15;while(m=0&n =0)bits n-=am-;while( n=0)bits n-=0;bin ary:b in ary(i nt a)for(int i=15;i=0;i-)bitsi=a%2+0;a=a/2;binary

17、operator +(bi nary&a,bi nary&b)bi nary c(00);int s=0, n1=0, n2=0;for(i nt i=0;i16;i+)n1= (a.bitsi=0?0:1)+n1*2; for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return c;binary operator -(bi nary&a,bi nary&b) bi nary c(00);int s=0, n1=0, n2=0;for(int i=0;i16;i+)n仁(a.bitsi=0?0:1)+n1*2; for(i=0;i=0;i-)c.bitsi=s%2+0;

18、s=s/2;return c;bin ary:operator int()int s=0 ;for(int i=0;i16;i+)s=(bitsi=0?0:1)+s*2; return s;void bin ary:pri nt()char str17; strncpy(str,bits,16); str16=0;coutvvstrvve ndl;void mai n()binary n仁1011;bin ary n 2=i nt(n 1)+15;binary n3=n 1-b in ary(7);n1.pri nt();n2.pri nt();n3.pri nt();cout int(n 2

19、)+5e ndl;cout n 2-b in ary(5)e ndl;cout n 3+b in ary(5)e ndl;cout int(n 3)-5e ndl;第五题/文件名:g4/功能:二进制类(2)运算符重载/ 完成时间:2012-12-18#i nclude #include class binary定义二进制类char bits16;二进制字模数组public:bin ary(char *);/字符串参数构造函数bin ary(i nt);/整型参数构造函数/重载+/重载-frie nd binary operator +(b inary&,binary&); friend bin

20、ary operator -(binary&,binary&); frie nd binary operator (b inary&);friend binary operator &(binary&,binary&); friend binary operator |(binary&,binary&); operator in t(); /类类型转换函数 void prin t();bin ary:bi nary(char*a)int m=strle n(a)-1;int n=15;while(m=0&n=0)bits n-=am-;while( n=0)bits n-=0;bin ary:

21、b in ary(i nt a)for(int i=15;i=0;i-)bitsi=a%2+0; a=a/2;binary operator +(b inary&a,b inary&b)bi nary c=00;int n仁0 ,n 2=0,s=0;for(int i=0;i16;i+)n仁(a.bitsi=0?0:1)+2* n1; for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return c;binary operator -(bi nary&a,bi nary&b)bi nary c=00;int n1=0 ,n 2=0,s=0;for(int i=0;i16;

22、i+)n1= (a.bitsi=0?0:1)+2* n1;for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return c;binary operator (b inary&a)bi nary c=00;for(int i=0;i16;i+)if(a.bitsi=0)c.bitsi=1;elsec.bitsi=0;return c;binary operator & (bi nary&a,bi nary&b)bi nary c=00;for(int i=0;i16;i+)if(a.bitsi=1 )&( b.bitsi=1)c.bitsi=1;elsec.bitsi=0;

23、return c;binary operator |(b inary&a,bi nary&b)bi nary c=00;for(int i=0;i16;i+)if(a.bitsi=1)|(b.bitsi=1)c.bitsi=1;elsec.bitsi=0;return c;bin ary:operator int()int s=0;for(int i=0;i16;i+)s=(bitsi=0?0:1)+2*s;return s;void bin ary:pri nt()char str17; strncpy(str,bits,16);str16=0; coutvvstrvve ndl;void

24、mai n()binary n仁1011;bin ary n 2=i nt(n 1)+15;binary n3=n 1-bi nary(7);n1.pri nt();n2.pri nt();n3.pri nt();binary n4=n1&n2;binary n5=n1|n2;binary n6=n1;n4 .pri nt();n 5.pri nt();n6.pri nt();匚v *C; VFiogra* FiLesMiciPsuTt Visual 5tudioKyProjeciDebu4. exe*130G6G0000I09Q0100)000008000911611liiii in ii

25、lisiaeany key tu cuutlnueH第六题文件名:g4/功能:简单集合运算/ 完成时间:2012-12-19#i nclude using n amespace std;class collectint str1OO;int num;public:collect() collect(i nt*,i nt); paixu();collect collect:operator +(collect&);collect collect:operator -(collect&);collect collect:operator /(collect&); add(i nt);inqu ir

26、e(i nt);del(i nt);void prin t();collect:add(i nt n)for(i nt i=0;i nu m;i+)if(ni;j-)strj=strj-1;strj=n;break;nu m+;collects nq uire(i nt n)coutstr n-1e ndl;collect:del( int n)for(int i=n-1;inum;i+)stri=stri+1;num-;collect:collect(i nt *p,i nt n)num=n;for(i nt i=0;i nu m;i+)stri=pi;stri=0;collect:paix

27、u()int temp=0;for(int i=0;inum-1;i+)for(i nt j=O;jstrj+1)temp=strj;strj=strj+1;strj+1=temp;collect collect:operator +(collect&A) collect C;int i,j,k=O,flag;for(i=0;iA .nu m;i+,k+)C. strk=A.stri;for(i=0;i nu m;i+)flag=1;for(j=0;jA .nu m;j+)if(A.strj=stri)flag=0;if(flag)C. strk+=stri;C.num=k;return C;

28、collect collect:operator -(collect&A)collect C;int i,j,k=O;for(i=0;iA .nu m;i+)for(j=0;j nu m;j+)if(A.stri=strj) C.strk+=A.stri;C.num=k;return C;collect collect:operator /(collect&A) collect C;int i,j,k=0,flag; for(i=0;i nu m;i+)flag=1;for(j=0;jA .nu m;j+) if(A.strj=stri) flag=0;if(flag)C.strk+=stri

29、;C.num=k; return C;void collect:pri nt()if(num=O) coutvve ndl;elsecout;for(int i=O;inum-1;i+) coutstrivv,; coutvstrivvve ndl;int main()int m,n;cinmn;int *a=new in tm;int *b=new intn;for(int i=O;i ai;for(i=O;i bi;collect A(a,m);collect B(b, n);A. paixu();B. paixu();A. prin t();B. pri nt();collect C=A

30、+B;collect D=A-B;collect E=A/B;C. paixu();D. paixu();E. paixu();C. pri nt();D. pri nt();E. pri nt(); return 0;第七题/文件名:hj/功能:图形类一一继承和派生/ 完成时间:2012-12-20#in cludeusing n amespace std;class picprotected:double h,w;public:pic(double m,double n )h=m;w=n;class recg:public picdouble A;public:recg(double m,

31、double n): pic(m, n) void area()A=h*w;coutvvAvve ndl;class tag:public picdouble A;public:tag(double m,double n ):pic(m, n)void area()A=h*w/2;coutvvAvve ndl;int main()int m,n ,x,y;cinmn xy;recg P(m, n);tag Q(x,y);P.area();Q.area(); return 0;第八题/文件名:df/功能:人民币类(类型转换)/ 完成时间:2012-12-20#i nclude #i nclude

32、 using n amespace std;class RMBprotected:double qia n;public:RMB()RMB(i nt x,i nt y,i nt z);double get();RMB:RMB(i nt x,i nt y,i nt z)qia n=x+0.10*y+0.01*z;double RMB:get()return qia n;int main()int m1, n1,q1,m2, n2,q2;double k1,k2;cin m1 n 1q1;cin k1;cin m2 n 2q2;cin k2;RMB s1(m1, n1,q1);RMB s2(m2,

33、 n2,q2);coutsetiosflags(ios:fixed)vvsetprecisio n(2)s1.get()-k1e ndl;coutsetiosflags(ios:fixed)vvsetprecisio n(2)s2.get()-k2e ndl; return 0;C;FrQGiu filesXliciDcuEt Visual StudiDXSrPEvjcctaXdfDcbucdf日回3 3 51-561 1 10.910.790.20Ptess any key to contidlW第九题/文件名:df/功能:教师工资计算(抽象类)/ 完成时间:2012-12-20#i ncl

34、ude using n amespace std;class teacherpublic:virtual void wage(i nt n)=0; ;class teacher_p:public teacherprotected:int s;public:void wage(i nt n)s=5000+50* n; coutse ndl;class teacher_v:public teacherprotected:int s;public:void wage(i nt n)s=3000+30* n;coutvvsvve ndl;;class teacher_j:public teacherp

35、rotected:int s;public:void wage(i nt n)s=2000+20* n; coutvvsvve ndl;int main()teacher *q;teacher_p p;teacher_v v;teacherj;char ch;int n;for(int i=0;i ch n;if(ch=p)q=&p;q-wage( n);if(ch=v)q=&v; q-wage( n);if(ch=j)q=&j; q-wage( n);return 0;第十题/文件名:hp/功能:计算图形面积和周长(抽象类)/ 完成时间:2012-12-20#i nclude #in clu

36、de #i nclude using n amespace std;class shapepublic:virtual double area()=0;virtual double perimeter()=0;;class Rect:public shapeprotected:double len gth,width;public:Rect(double x1,double y1,double x2,double y2)len gth=x2-x1; width=y2-y1;double area()return len gth*width;double perimeter()return len gth+width;class Trian gle:public s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论