综合实验四参考答案.docx

上传人:b****3 文档编号:3498290 上传时间:2022-11-23 格式:DOCX 页数:49 大小:27.41KB
下载 相关 举报
综合实验四参考答案.docx_第1页
第1页 / 共49页
综合实验四参考答案.docx_第2页
第2页 / 共49页
综合实验四参考答案.docx_第3页
第3页 / 共49页
综合实验四参考答案.docx_第4页
第4页 / 共49页
综合实验四参考答案.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

综合实验四参考答案.docx

《综合实验四参考答案.docx》由会员分享,可在线阅读,更多相关《综合实验四参考答案.docx(49页珍藏版)》请在冰豆网上搜索。

综合实验四参考答案.docx

综合实验四参考答案

综合实验四面向对象的程序设计

[实验目的]

1.掌握类和对象的定义

2.掌握面向对象的程序设计方法

3.掌握类的继承与派生

4.掌握基类和虚函数的用法

5.掌握运算符重载的方法

6.掌握I/O流类的操作

[实验环境]

1.软件需求:

VisualC++6.0

2.硬件需求:

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)样例输入

2

1008张三男2500

1009李四女2600

e)样例输出

人数:

2

总工资:

5100元

个人基本信息:

编号:

1008

姓名:

张三

性别:

工资:

2500

个人基本信息:

编号:

1009

姓名:

李四

性别:

工资:

2600

参考程序:

/********************************************************

2012IMISC++Practice4(Objectorientedprogramming)

Task1

Programmedby

YEHuanzhuo

Lakeside

Nov.28,2012

********************************************************/

#include

#include

usingnamespacestd;

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<<"编号:

"<

cout<<"姓名:

"<

cout<<"性别:

"<

cout<<"工资:

"<

}

voidEmployee:

:

ShowStatic()

{

cout<<"人数:

"<

cout<<"总工资:

"<

}

intmain()

{

intn,i,nu,wg;

charnm[18],sx[3];

cin>>n;

Employee**a=newEmployee*[n];

for(i=0;i

{

cin>>nu>>nm>>sx>>wg;

a[i]=newEmployee(nu,nm,sx,wg);

}

Employee:

:

ShowStatic();

for(i=0;i

{

a[i]->ShowBase();

deletea[i];

if(i!

=n-1)

cout<

}

delete[]a;

return0;

}

 

2.日期类Date的设计(构造函数) 

a)题目描述

定义一个日期类Date,能提供和设置由年、月、日组成的日期。

编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:

yyyy-mm-dd

b)输入描述

初始化日期类Date对象的数据,分别是年、月、日。

程序有多个测试用例。

c)输出描述

按照指定格式输出的日期。

d)样例输入

20101230

20121830

2012610

e)样例输出

2010-12-30

ERRORDATE

2012-06-10

参考程序:

/********************************************************

2012IMISC++Practice4(Objectorientedprogramming)

Task2

Programmedby

YEHuanzhuo

Lakeside

Nov.28,2012

********************************************************/

#include

#include

usingnamespacestd;

classDate

{

intyear;

intmonth;

intday;

public:

Date(inty,intm,intd);

voidshow();

};

Date:

:

Date(inty,intm,intd)

{

year=y;

month=m;

day=d;

}

voidDate:

:

show()

{

cout<

(2)<

(2)<

}

intmain()

{

inty,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]))

{

DateD(y,m,d);

D.show();

}

else

cout<<"ERRORDATE"<

}

else

cout<<"ERRORDATE"<

}

return0;

}

 

3.复数类Imaginary(友元函数)

a)题目描述

根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。

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

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

intmain()

{

floatx1,y1,x2,y2;

cin>>x1>>y1>>x2>>y2;//输入4个数据,分别表示进行运算的两个复数的实部和虚部

Imaginaryimag1(x1,y1),imag2(x2,y2);//用x1、y1创建Imaginary类对象imag1

Add(imag1,imag2);//调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)

Sub(imag1,imag2);//求两个复数之差并显示运算结果

return0;

}

b)输入描述

输入4个数据,分别表示进行运算的两个复数的实部和虚部

c)输出描述

2行,分别显示两个复数进行加、减运算的结果

d)样例输入

1325

e)样例输出

3+8i

-1-2i

参考程序:

/********************************************************

2012IMISC++Practice4(Objectorientedprogramming)

Task3

Programmedby

YEHuanzhuo

Lakeside

Nov.28,2012

********************************************************/

#include

usingnamespacestd;

classImaginary

{

private:

floata,b;

public:

Imaginary(floatx,floaty):

a(x),b(y){}

voidprint()

{

if(a)

{

cout<

if(b>0)

cout<<"+";

}

elseif(b==0)

{

cout<<0;

return;

}

if(b==1)

cout<<"i";

elseif(b==-1)

cout<<"-i";

elseif(b)

cout<

}

friendvoidAdd(Imaginaryc,Imaginaryd);

friendvoidSub(Imaginaryc,Imaginaryd);

};

voidAdd(Imaginaryc,Imaginaryd)

{

Imaginarye(c.a+d.a,c.b+d.b);

e.print();

cout<

}

voidSub(Imaginaryc,Imaginaryd)

{

Imaginarye(c.a-d.a,c.b-d.b);

e.print();

cout<

}

intmain()

{

floatx1,y1,x2,y2;

cin>>x1>>y1>>x2>>y2;//输入4个数据,分别表示进行运算的两个复数的实部和虚部

Imaginaryimag1(x1,y1),imag2(x2,y2);//用x1、y1创建Imaginary类对象imag1

Add(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();

cout<

cout<

cout<

cout<

return0;

}

b)输入描述

c)输出描述

d)样例输入

e)样例输出

0000000000001011

0000000000011010

0000000000000100

31

21

9

-1

参考程序:

/********************************************************

2012IMISC++Practice4(Objectorientedprogramming)

Task4

Programmedby

YEHuanzhuo

Lakeside

Nov.28,2012

********************************************************/

//iftheprogramisjudgedbyOJ,pleasefollowC++headfilestandard

#include

#include

//usingnamespacestd;

classbinary{//定义二进制类

charbits[16];//二进制字模数组

public:

binary(char*);//字符串参数构造函数

binary(int);//整型参数构造函数

friendbinaryoperator+(binary,binary);//重载“+”

friendbinaryoperator-(binary,binary);//重载“-”

operatorint();//类类型转换函数

voidprint();

};

binary:

:

binary(char*b)

{

inti,slen=strlen(b);

for(i=0;i

bits[i]=b[slen-1-i]-'0';//youmayuseintorchar

for(;i<16;i++)//filltherestwithzero

bits[i]=0;

}

binary:

:

binary(inta)

{

inti=0;

while(a)

{

bits[i++]=a%2;

a/=2;//a>>=1;

}

for(;i<16;i++)

bits[i]=0;

}

binary:

:

operatorint()

{

inta=0,b=1,i;

for(i=0;i<16;i++)

{

if(bits[i])

a+=b;

b<<=1;//b*=2;

}

returna;

}

voidbinary:

:

print()

{

inti;

for(i=15;i>=0;i--)

cout<<(int)bits[i];

cout<

}

binaryoperator+(binaryx,binaryy)

{

binaryz(0);

inti,a=0;

for(i=0;i<16;i++)

{

z.bits[i]=x.bits[i]+y.bits[i]+a;

a=z.bits[i]/2;

z.bits[i]%=2;

}

returnz;

}

binaryoperator-(binaryx,binaryy)

{

binaryz(0);

inti,a=0;

for(i=0;i<16;i++)

{

z.bits[i]=x.bits[i]-y.bits[i]-a;

if(z.bits[i]<0)

{

a=1;

z.bits[i]+=2;

}

else

a=0;

}

returnz;

}

intmain()

{

binaryn1="1011";

binaryn2=int(n1)+15;

binaryn3=n1-binary(7);

n1.print();

n2.print();

n3.print();

cout<

cout<

cout<

cout<

return0;

}

 

5.二进制类

(2)——运算符重载

a)题目描述

在上一题的基础上,将+、-运算符定义为binary类的成员函数。

并且重载运算符~、&、|,分别将二进制数按位取反、数按位与及按位或。

主函数设计如下:

intmain()

{

binaryn1="1011";

binaryn2=int(n1)+15;

binaryn3=n1-binary(7);

n1.print();

n2.print();

n3.print();

binaryn4=n1&n2;

binaryn5=n1|n2;

binaryn6=~n1;

n4.print();

n5.print();

n6.print();

return0;

}

b)输入描述

c)输出描述

d)样例输入

e)样例输出

0000000000001011

0000000000011010

0000000000000100

0000000000001010

0000000000011011

111111*********0

参考程序:

/********************************************************

2012IMISC++Practice4(Objectorientedprogramming)

Task5

Programmedby

YEHuanzhuo

Lakeside

Nov.28,2012

********************************************************/

//iftheprogramisjudgedbyOJ,pleasefollowC++headfilestandard

#include

#include

//usingnamespacestd;

classbinary{//定义二进制类

charbits[16];//二进制字模数组

public:

binary(char*);//字符串参数构造函数

binary(int);//整型参数构造函数

binaryoperator+(binary);//重载“+”

binaryoperator-(binary);//重载“-”

binaryoperator~();//重载“~”

binaryoperator&(binary);//重载“&”

binaryoperator|(binary);//重载“|”

operatorint();//类类型转换函数

voidprint();

};

binary:

:

binary(char*b)

{

inti,slen=strlen(b);

for(i=0;i

bits[i]=b[slen-1-i]-'0';//youmayuseintorchar

for(;i<16;i++)//filltherestwithzero

bits[i]=0;

}

binary:

:

binary(inta)

{

inti=0;

while(a)

{

bits[i++]=a%2;

a/=2;//a>>=1;

}

for(;i<16;i++)

bits[i]=0;

}

binary:

:

operatorint()

{

inta=0,b=1,i;

for(i=0;i<16;i++)

{

if(bits[i])

a+=b;

b<<=1;//b*=2;

}

returna;

}

voidbinary:

:

print()

{

inti;

for(i=15;i>=0;i--)

cout<<(int)bits[i];

cout<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1