您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 会议纪要 > 2012综合实验四-参考答案
综合实验四面向对象的程序设计[实验目的]1.掌握类和对象的定义2.掌握面向对象的程序设计方法3.掌握类的继承与派生4.掌握基类和虚函数的用法5.掌握运算符重载的方法6.掌握I/O流类的操作[实验环境]1.软件需求:VisualC++6.02.硬件需求:PentiumIII450以上的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李四女2600e)样例输出人数:2总工资:5100元个人基本信息:编号:1008姓名:张三性别:男工资:2500个人基本信息:编号:1009姓名:李四性别:女工资:2600参考程序:/********************************************************2012IMISC++Practice4(Objectorientedprogramming)Task1ProgrammedbyYEHuanzhuoLakesideNov.28,2012********************************************************/#includeiostream#includestringusingnamespacestd;classEmployee{protected:intnum;charname[18];charsex[3];intwage;staticintcount;staticinttotalWage;public:Employee(intnu,char*nm,char*sx,intwg);~Employee();voidShowBase();staticvoidShowStatic();};intEmployee::count=0;intEmployee::totalWage=0;Employee::Employee(intnu,char*nm,char*sx,intwg){num=nu;strcpy(name,nm);strcpy(sex,sx);wage=wg;count++;totalWage+=wg;}Employee::~Employee(){count--;totalWage-=wage;}voidEmployee::ShowBase(){cout个人基本信息:\n;cout编号:numendl;cout姓名:nameendl;cout性别:sexendl;cout工资:wageendl;}voidEmployee::ShowStatic(){cout人数:countendl;cout总工资:totalWage元endl;}intmain(){intn,i,nu,wg;charnm[18],sx[3];cinn;Employee**a=newEmployee*[n];for(i=0;in;i++){cinnunmsxwg;a[i]=newEmployee(nu,nm,sx,wg);}Employee::ShowStatic();for(i=0;in;i++){a[i]-ShowBase();deletea[i];if(i!=n-1)coutendl;}delete[]a;return0;}2.日期类Date的设计(构造函数)a)题目描述定义一个日期类Date,能提供和设置由年、月、日组成的日期。编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:yyyy-mm-ddb)输入描述初始化日期类Date对象的数据,分别是年、月、日。程序有多个测试用例。c)输出描述按照指定格式输出的日期。d)样例输入20101230201218302012610e)样例输出2010-12-30ERRORDATE2012-06-10参考程序:/********************************************************2012IMISC++Practice4(Objectorientedprogramming)Task2ProgrammedbyYEHuanzhuoLakesideNov.28,2012********************************************************/#includeiostream#includeiomanipusingnamespacestd;classDate{intyear;intmonth;intday;public:Date(inty,intm,intd);voidshow();};Date::Date(inty,intm,intd){year=y;month=m;day=d;}voidDate::show(){coutsetfill('0')year-setw(2)month-setw(2)daysetfill('')endl;}intmain(){inty,m,d,leap,md[]={0,31,28,31,30,31,30,31,31,30,31,30,31};while(cinymd){if(y=0&&y=9999&&m=1&&m=12){leap=y%4==0&&y%100!=0||y%400==0;if((m==2&&d=md[m]+leap)||(m!=2&&d=md[m])){DateD(y,m,d);D.show();}elsecoutERRORDATEendl;}elsecoutERRORDATEendl;}return0;}3.复数类Imaginary(友元函数)a)题目描述根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。intmain(){floatx1,y1,x2,y2;cinx1y1x2y2;//输入4个数据,分别表示进行运算的两个复数的实部和虚部Imaginaryimag1(x1,y1),imag2(x2,y2);//用x1、y1创建Imaginary类对象imag1Add(imag1,imag2);//调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)Sub(imag1,imag2);//求两个复数之差并显示运算结果return0;}b)输入描述输入4个数据,分别表示进行运算的两个复数的实部和虚部c)输出描述2行,分别显示两个复数进行加、减运算的结果d)样例输入1325e)样例输出3+8i-1-2i参考程序:/********************************************************2012IMISC++Practice4(Objectorientedprogramming)Task3ProgrammedbyYEHuanzhuoLakesideNov.28,2012********************************************************/#includeiostreamusingnamespacestd;classImaginary{private:floata,b;public:Imaginary(floatx,floaty):a(x),b(y){}voidprint(){if(a){couta;if(b0)cout+;}elseif(b==0){cout0;return;}if(b==1)couti;elseif(b==-1)cout-i;elseif(b)coutbi;}friendvoidAdd(Imaginaryc,Imaginaryd);friendvoidSub(Imaginaryc,Imaginaryd);};voidAdd(Imaginaryc,Imaginaryd){Imaginarye(c.a+d.a,c.b+d.b);e.print();coutendl;}voidSub(Imaginaryc,Imaginaryd){Imaginarye(c.a-d.a,c.b-d.b);e.print();coutendl;}intmain(){floatx1,y1,x2,y2;cinx1y1x2y2;//输入4个数据,分别表示进行运算的两个复数的实部和虚部Imaginaryimag1(x1,y1),imag2(x2,y2);//用x1、y1创建Imaginary类对象imag1Add(imag1,imag2);//调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)Sub(imag1,imag2);//求两个复数之差并显示运算结果return0;}4.二进制类(1)——运算符重载a)题目描述将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换。两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。classbinary{//定义二进制类charbits[16];//二进制字模数组public:binary(char*);//字符串参数构造函数binary(int);//整型参数构造函数friendbinaryoperator+(binary,binary);//重载“+”friendbinaryoperator-(binary,binary);//重载“-”operatorint();//类类型转换函数voidprint();};主函数设计如下:intmain(){binaryn1=1011;binaryn2=int(n1)+15;binaryn3=n1-binary(7);n1.print();n2.print();n3.print();coutint(n2)+5endl;coutn2-binary(5)endl;coutn3
本文标题:2012综合实验四-参考答案
链接地址:https://www.777doc.com/doc-3039095 .html