当前位置:文档之家› 2012综合实验四-参考答案

2012综合实验四-参考答案

综合实验四面向对象的程序设计[实验目的]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 李四女 2600e)样例输出人数:2总工资:5100元个人基本信息:编号:1008姓名:张三性别:男工资:2500个人基本信息:编号:1009姓名:李四性别:女工资:2600参考程序:/******************************************************** 2012 IMIS C++ Practice 4 (Object oriented programming)Task 1Programmed byYE HuanzhuoLakesideNov.28, 2012********************************************************/ #include <iostream>#include <string>using namespace std;class Employee{protected:int num;char name[18];char sex[3];int wage;static int count;static int totalWage;public:Employee(int nu, char * nm, char * sx, int wg);~Employee();void ShowBase();static void ShowStatic();};int Employee::count=0;int Employee::totalWage=0;Employee::Employee(int nu, char * nm, char * sx, int wg) {num=nu;strcpy(name, nm);strcpy(sex, sx);wage=wg;count++;totalWage+=wg;}Employee::~Employee(){count--;totalWage-=wage;}void Employee::ShowBase(){cout<<"个人基本信息:\n";cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"工资:"<<wage<<endl;}void Employee::ShowStatic(){cout<<"人数:"<<count<<endl;cout<<"总工资:"<<totalWage<<"元"<<endl; }int main(){int n, i, nu, wg;char nm[18], sx[3];cin>>n;Employee **a=new Employee* [n];for(i=0; i<n; i++){cin>>nu>>nm>>sx>>wg;a[i]=new Employee(nu, nm, sx, wg);}Employee::ShowStatic();for(i=0; i<n; i++){a[i]->ShowBase();delete a[i];if(i!=n-1)cout<<endl;}delete [] a;return 0;}2.日期类Date的设计(构造函数)a)题目描述定义一个日期类Date,能提供和设置由年、月、日组成的日期。

编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:yyyy-mm-ddb)输入描述初始化日期类Date对象的数据,分别是年、月、日。

程序有多个测试用例。

c)输出描述按照指定格式输出的日期。

d)样例输入2010 12 302012 18 302012 6 10e)样例输出2010-12-30ERROR DATE2012-06-10参考程序:/********************************************************2012 IMIS C++ Practice 4 (Object oriented programming)Task 2Programmed byYE HuanzhuoLakesideNov.28, 2012********************************************************/#include <iostream>#include <iomanip>using namespace std;class Date{int year;int month;int day;public:Date(int y, int m, int d);void show();};Date::Date(int y, int m, int d){year=y;month=m;day=d;}void Date::show(){cout<<setfill('0')<<year<<"-"<<setw(2)<<month<<"-"<<setw(2)<<day<<setfill(' ')<<endl;}int main(){int y, m, d, leap, md[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};while(cin>>y>>m>>d){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])){Date D(y, m, d);D.show();}elsecout<<"ERROR DATE"<<endl;}elsecout<<"ERROR DATE"<<endl;}return 0;}3.复数类Imaginary(友元函数)a)题目描述根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。

类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。

设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。

int main(){float x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2; //输入4个数据,分别表示进行运算的两个复数的实部和虚部Imaginary imag1(x1,y1),imag2(x2,y2); //用x1、y1创建Imaginary类对象imag1Add(imag1,imag2); //调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)Sub(imag1,imag2); //求两个复数之差并显示运算结果return 0;}b)输入描述输入4个数据,分别表示进行运算的两个复数的实部和虚部c)输出描述2行,分别显示两个复数进行加、减运算的结果d)样例输入1 32 5e)样例输出3+8i-1-2i参考程序:/********************************************************2012 IMIS C++ Practice 4 (Object oriented programming)Task 3Programmed byYE HuanzhuoLakesideNov.28, 2012********************************************************/#include <iostream>using namespace std;class Imaginary{private:float a, b;public:Imaginary(float x, float y):a(x), b(y) {}void print(){if(a){cout<<a;if(b>0)cout<<"+";}else if(b==0){cout<<0;return;}if(b==1)cout<<"i";else if(b==-1)cout<<"-i";else if(b)cout<<b<<"i";}friend void Add(Imaginary c, Imaginary d);friend void Sub(Imaginary c, Imaginary d); };void Add(Imaginary c, Imaginary d){Imaginary e(c.a+d.a, c.b+d.b);e.print();cout<<endl;}void Sub(Imaginary c, Imaginary d){Imaginary e(c.a-d.a, c.b-d.b);e.print();cout<<endl;}int main(){float x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2; //输入4个数据,分别表示进行运算的两个复数的实部和虚部Imaginary imag1(x1,y1),imag2(x2,y2); //用x1、y1创建Imaginary类对象imag1Add(imag1,imag2); //调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a 和b均为实数)Sub(imag1,imag2); //求两个复数之差并显示运算结果return 0;}4.二进制类(1)——运算符重载a)题目描述将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。

相关主题