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

下载本文档

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

文档简介

程序设计语言实验报告实验序号: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) 题目描述定义一个描述员工(Employee)基本情况的类,数据成员包括编号(num)、姓名(name)、性别(sex)、工资(wage)、人数(count)、总工资(totalWage)。其中姓名定义为长度为18的字符数组,性别定义为长度为3的字符数组,其它数据类型为整型,总工资和人数为静态数据成员,函数成员包括构造函数、显示基本函数(ShowBase)和显示静态数据函数(ShowStatic),其中构造函数由已知参数编号(nu),姓名(nm)、性别(sx)和工资(wg)构造对象,显示基本数据函数用于显示学生的编号、姓名、性别和工资,显示静态数据函数为静态成员函数,用于显示人数和总工资;要求所有数据成员为protected访问权限,所有成员函数为public访问权限,在主函数中定义若干个员工对象,分别显示员工基本信息,以及显示员工人数和总工资。 b) 输入描述第一行要求输入一个小于10的数字n,表示即将录入的员工数量,换行后从键盘录入每个员工的数据,依次是编号,姓名,性别,工资,每个员工占一行 c) 输出描述第一行显示“人数:”,第二行显示“总工资:”,后面分别显示每个员工的信息,每个员工之间空一行d) 样例输入21008 张三 男 25001009 李四 女 2600 e) 样例输出人数:2总工资:5100元个人基本信息:编号:1008姓名:张三性别:男工资:2500个人基本信息:编号:1009姓名:李四性别:女工资:26002. 日期类Date的设计(构造函数) a) 题目描述定义一个日期类Date,能提供和设置由年、月、日组成的日期。编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:yyyy-mm-dd b) 输入描述初始化日期类Date对象的数据,分别是年、月、日。程序有多个测试用例。 c) 输出描述按照指定格式输出的日期。 d) 样例输入2010 12 302012 18 302012 6 10 e) 样例输出2010-12-30ERROR DATE2012-06-103. 复数类Imaginary(友元函数)a) 题目描述根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“abi”格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。int main() float x1,y1,x2,y2; cinx1y1x2y2; /输入4个数据,分别表示进行运算的两个复数的实部和虚部 Imaginary imag1(x1,y1),imag2(x2,y2); /用x1、y1创建Imaginary类对象imag1 Add(imag1,imag2); /调用友元函数求两个复数之和,按abi的格式显示运算结果(a和b均为实数) Sub(imag1,imag2); /求两个复数之差并显示运算结果 return 0; b) 输入描述输入4个数据,分别表示进行运算的两个复数的实部和虚部 c) 输出描述2行,分别显示两个复数进行加、减运算的结果 d) 样例输入1 3 2 5 e) 样例输出3+8i-1-2i 4. 二进制类(1)运算符重载a) 题目描述将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换。两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。class binary /定义二进制类 char bits16; /二进制字模数组public: binary(char *); /字符串参数构造函数 binary(int); /整型参数构造函数 friend binary operator +(binary,binary); /重载“+” friend binary operator -(binary,binary); /重载“-” operator int(); /类类型转换函数 void print();主函数设计如下:int main() binary n1=1011; binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print(); coutint(n2)+5endl; coutn2-binary(5)endl; coutn3+binary(5)endl; coutint(n3)-5、=、48706055658499024618501666452069820990222680543730745561173223255953006515880343449832824383387870686263650800589681213456312563835423612992344693965267757962348828739=84592316712376982456124140566732455778304767012929418494840544540387747126092936976987860569415905562851445470802476218202188514229617516239387836037621806413112049773972123323007151923718757730213899815509196276039659381252042527294867590492136564321671754460256400172008142164350078857012092315307=907145092560931574534094350840314027165670909824872e) 样例输出77984220384620272064180915700170382149543251582872845077711643432215706203255356497143524778562113468775361492716430761785681439720272653527639853476844171700671299791197920011931807664846966444010110四、实验结果与数据处理第一题/文件名:hp/功能:设计员工类Employee(静态数据成员)/完成时间:2012-12-13#include #include using namespace std;class Employeeprotected:int num,wage;static int count;static int totalWage;char name18,sex3;public:Employee(int nu,char*nm,char*sx,int wg);Employee();Employee();ShowBase();static int ShowStatic();Employee:ShowBase()coutn 个人基本信息:;coutn 编号:num;coutn 姓名:name;coutn 性别:sex;coutn 工资wageendl;Employee:ShowStatic()coutn 人数:countendl;cout总工资:totalWage元n;Employee *m=new Employeen;int nu,wg;char nm18,sx3;for(int i=0;inunmsxwg;mi=Employee(nu,nm,sx,wg);Employee:ShowStatic();for(i=0;in;i+)mi.ShowBase();return 0;delete m;第二题/文件名:cc/功能:日期类Date的设计(构造函数) /完成时间:2012-12-13#include #include using namespace std;class dateprotected:int y,m,d;static int x;public:date(int y,int m,int d);date();date();void display(int y,int m,int d);static int getx();int date:x=1;int date:getx()return x;void date:display(int y,int m,int d)couty-setw(2)setfill(0)m-setw(2)setfill(0)d12)coutERROR DATE31)coutERROR DATE29)coutERROR DATE28)coutERROR DATE30)coutERROR DATEymd;date A;date(y,m,d);k=A.getx();if(k)A.display(y,m,d);return 0;第三题/文件名:g4/功能:复数类Imaginary(友元函数)/完成时间:2012-12-14#include using namespace std;class Imaginaryprivate:float a,b;public:Imaginary()a=0,b=0;Imaginary(float i,float j);Imaginary();friend Imaginary Add(Imaginary&A,Imaginary&B);friend Imaginary Sub(Imaginary&A,Imaginary&B);void print()if(a=0)if(b=0)coutaendl;elsecoutbiendl;if(a)cout0) cout+biendl;else if(b=0) coutendl;elsecoutbix1y1x2y2; Imaginary imag1(x1,y1),imag2(x2,y2); Add(imag1,imag2); Sub(imag1,imag2); return 0; 第四题/文件名:g4/功能: 二进制类(1)运算符重载/完成时间:2012-12-14#include #include class binary /定义二进制类 char bits16; /二进制字模数组public: binary(char *); /字符串参数构造函数 binary(int); /整型参数构造函数 friend binary operator +(binary &,binary &); /重载+ friend binary operator -(binary& ,binary& ); /重载- operator int(); /类类型转换函数 void print();binary:binary(char *a)int m=strlen(a)-1;int n=15;while(m=0&n=0)bitsn-=am-;while(n=0)bitsn-=0;binary:binary(int a)for(int i=15;i=0;i-)bitsi=a%2+0;a=a/2;binary operator +(binary&a,binary&b)binary c(00);int s=0,n1=0,n2=0;for(int 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 -(binary&a,binary&b)binary c(00);int s=0,n1=0,n2=0;for(int 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 int()int s=0 ;for(int i=0;i16;i+)s=(bitsi=0?0:1)+s*2;return s;void binary:print()char str17;strncpy(str,bits,16);str16=0;coutstrendl;void main() binary n1=1011; binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print(); coutint(n2)+5endl; coutn2-binary(5)endl; coutn3+binary(5)endl; coutint(n3)-5endl; 第五题/文件名:g4/功能: 二进制类(2)运算符重载/完成时间:2012-12-18#include #include class binary /定义二进制类 char bits16; /二进制字模数组public: binary(char *); /字符串参数构造函数 binary(int); /整型参数构造函数 friend binary operator +(binary&,binary&); /重载+ friend binary operator -(binary&,binary& ); /重载- friend binary operator (binary&); friend binary operator &(binary&,binary&); friend binary operator |(binary&,binary&); operator int(); /类类型转换函数 void print();binary:binary(char*a)int m=strlen(a)-1;int n=15;while(m=0&n=0)bitsn-=am-;while(n=0)bitsn-=0;binary:binary(int a)for(int i=15;i=0;i-)bitsi=a%2+0;a=a/2;binary operator +(binary&a,binary&b)binary c=00;int n1=0,n2=0,s=0;for(int i=0;i16;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 -(binary&a,binary&b)binary c=00;int n1=0,n2=0,s=0;for(int i=0;i16;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 (binary&a)binary c=00;for(int i=0;i16;i+)if(a.bitsi=0)c.bitsi=1;elsec.bitsi=0;return c;binary operator &(binary&a,binary&b)binary c=00;for(int i=0;i16;i+)if(a.bitsi=1)&(b.bitsi=1)c.bitsi=1;elsec.bitsi=0;return c;binary operator |(binary&a,binary&b)binary c=00;for(int i=0;i16;i+)if(a.bitsi=1)|(b.bitsi=1)c.bitsi=1;elsec.bitsi=0;return c;binary:operator int()int s=0;for(int i=0;i16;i+)s=(bitsi=0?0:1)+2*s;return s;void binary:print()char str17;strncpy(str,bits,16);str16=0;coutstrendl;void main() binary n1=1011; binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print(); binary n4=n1&n2; binary n5=n1|n2; binary n6=n1; n4.print(); n5.print(); n6.print(); 第六题/文件名:g4/功能:简单集合运算/完成时间:2012-12-19#include using namespace std;class collectint str100;int num;public:collect()collect(int*,int); paixu();collect collect:operator +(collect&);collect collect:operator -(collect&);collect collect:operator /(collect&); add(int);inquire(int); del(int);void print();collect:add(int n)for(int i=0;inum;i+)if(ni;j-)strj=strj-1;strj=n;break;num+;collect:inquire(int n)coutstrn-1endl;collect:del(int n)for(int i=n-1;inum;i+)stri=stri+1;num-;collect:collect(int *p,int n)num=n;for(int i=0;inum;i+)stri=pi;stri=0;collect:paixu()int temp=0;for(int i=0;inum-1;i+)for(int j=0;jstrj+1)temp=strj;strj=strj+1;strj+1=temp;collect collect:operator +(collect&A)collect C;int i,j,k=0,flag;for(i=0;iA.num;i+,k+)C.strk=A.stri;for(i=0;inum;i+) flag=1;for(j=0;jA.num;j+)if(A.strj=stri) flag=0;if(flag)C.strk+=stri;C.num=k;return C;collect collect:operator -(collect&A)collect C;int i,j,k=0;for(i=0;iA.num;i+)for(j=0;jnum;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;inum;i+)flag=1;for(j=0;jA.num;j+)if(A.strj=stri) flag=0;if(flag)C.strk+=stri;C.num=k;return C;void collect:print()if(num=0)coutendl;elsecout;for(int i=0;inum-1;i+)coutstri,;coutstrimn;int *a=new intm;int *b=new intn;for(int i=0;iai;for(i=0;ibi; collect A(a,m);collect B(b,n);A.paixu();B.paixu();A.print();B.print();collect C=A+B;collect D=A-B;collect E=A/B;C.paixu();D.paixu();E.paixu();C.print();D.print();E.print();return 0;第七题/文件名:hj/功能:图形类继承和派生/完成时间:2012-12-20#includeusing namespace std;class picprotected:double h,w;public: pic(double m,double n)h=m;w=n;class recg:public pic double A;public: recg(double m,double n): pic(m,n) void area()A=h*w; coutAendl;class tag:public pic double A;public:tag(double m,double n):pic(m,n) void area()A=h*w/2;coutAmnxy;recg P(m,n);tag Q(x,y);P.area();Q.area();return 0;第八题/文件名:df/功能:人民币类(类型转换)/完成时间:2012-12-20#include #include using namespace std;class RMBprotected:double qian;public:RMB()RMB(int x,int y,int z);double get();RMB:RMB(int x,int y,int z)qian=x+0.10*y+0.01*z;double RMB:get()return qian;int main()int m1,n1

温馨提示

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

评论

0/150

提交评论