实验10.docx

上传人:b****5 文档编号:29862000 上传时间:2023-07-27 格式:DOCX 页数:16 大小:62.16KB
下载 相关 举报
实验10.docx_第1页
第1页 / 共16页
实验10.docx_第2页
第2页 / 共16页
实验10.docx_第3页
第3页 / 共16页
实验10.docx_第4页
第4页 / 共16页
实验10.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验10.docx

《实验10.docx》由会员分享,可在线阅读,更多相关《实验10.docx(16页珍藏版)》请在冰豆网上搜索。

实验10.docx

实验10

实验10类与对象1

(2)

请将自己报告部分,文字和程序代码,加粗

完成下面实验内容和实验要求。

自测练习

1.实验10自测题2

⑴定义一个书籍类Book,其成员数据包括名称name、作者author、出版社press和页数numberOfPages。

实现一个打印自身信息的内联成员函数printBook(),将修改出版社的函数setPress()实现为带默认参数值的函数,默认的参数为”清华大学出版社”。

生成一个出版社为”高等教育出版社”的Book对象,调用setPress()成员函数将出版社修改为”清华大学出版社”,调用printBook()成员函数打印修改出版社前后的对象信息。

⑵要求

给出缺省构造函数和带所有成员数据的构造函数

⑶思路

参考教材中“类的成员函数为带默认参数值的函数和内联成员函数”的相关代码

⑷将下面程序代码补充完整,并运行

#include//包含头文件iostream

usingnamespacestd;//使用命名空间std

classBook

{

public:

Book();

Book(constchar*pName,constchar*pAuthor,constchar*pPress,intpNumberOfPages);

voidsetPress(constchar*pPress);

voidprintBook();

~Book();

private:

char*name;

char*author;

char*press;

intnumberOfpages;

//类Book的定义

};

Book:

:

Book()

{*name;

*author;

*press;

numberOfpages;

//Book缺省构造函数的实现

}

Book:

:

Book(constchar*pName,constchar*pAuthor,constchar*pPress,intpNumberOfPages)

{name=newchar[strlen(pName)+1];

if(pName!

=0)

strcpy(name,pName);

author=newchar[strlen(pAuthor)+1];

if(pAuthor!

=0)

strcpy(author,pAuthor);

press=newchar[strlen(pPress)+1];

if(pPress!

=0)

strcpy(press,pPress);

numberOfpages=pNumberOfPages;

//Book带所有成员数据的构造函数的实现

}

inlinevoidBook:

:

printBook()

{cout<<"name"<

//Book内联成员函数printBook的实现

}

voidBook:

:

setPress(constchar*pPress="清华大学出版社")

{press=newchar[strlen(pPress)+1];

if(pPress!

=0)

strcpy(press,pPress);

//Book成员函数setPress的实现

}

Book:

:

~Book()

{

delete[]name;

delete[]author;

delete[]press;

}

intmain()

{

Bookbk("微机原理与接口技术","姚琳","高等教育出版社",271);

bk.printBook();

bk.setPress();

bk.printBook();

return0;

}⑸运行结果

⑹思考题及问题

考虑如何将内联成员函数setPress实现为另外一种形式(不使用关键字inline)?

 

2.实验10自测题3

⑴定义一个工程师类Engineer,其成员数据包括编号id、姓名name和职称position,实现一个打印自身信息的成员函数printEngineer(),定义一个包含4个工程师对象的对象数组,并使用new运算符申请两个匿名对象。

调用printEngineer()打印所有对象的信息。

⑵要求

给出Engineer类的构造函数和析构函数

⑶思路

参考实验10练习题3及教材中“对象数组和对象指针”的相关代码

⑷将下面程序代码补充完整,并运行

#include//包含头文件iostream

usingnamespacestd;//使用命名空间std

classEngineer

{public:

Engineer(){};

Engineer(intpId,char*pName,char*pPosition);

voidsetEngineer(intpId,char*pName,char*pPosition);

~Engineer();

voidprintEngineer();

private:

intid;

char*name;

char*position;

//类Engineer的定义

};

Engineer:

:

Engineer(intpId,char*pName,char*pPosition)

{id=pId;

name=newchar[strlen(pName)+1];

if(pName!

=0)strcpy(name,pName);

position=newchar[strlen(pPosition)+1];

if(pPosition!

=0)strcpy(position,pPosition);

//Engineer的构造函数的实现

}

voidEngineer:

:

setEngineer(intpId,char*pName,char*pPosition)

{id=pId;

name=newchar[strlen(pName)+1];

if(pName!

=0)

strcpy(name,pName);

position=newchar[strlen(pPosition)+1];

if(pPosition!

=0)

strcpy(position,pPosition);

//Engineer的成员函数setEngineer的实现

}

Engineer:

:

~Engineer()

{

delete[]name;

delete[]position;//Engineer的析构函数的实现

}

voidEngineer:

:

printEngineer()

{cout<<"id"<

//Engineer的成员函数prinEngineer的实现

}

intmain()

{

Engineere[4];

e[0].setEngineer(1001,"王含","讲师");

e[1].setEngineer(1002,"张青","讲师");

e[2].setEngineer(1003,"赵菁","副教授");

e[3].setEngineer(1004,"姚琳","教授");

Engineer*pE1=newEngineer(1005,"方伟","副教授");

Engineer*pE2=newEngineer(1006,"黄玲","教授");

e[0].printEngineer();

e[1].printEngineer();

e[2].printEngineer();

e[3].printEngineer();

pE1->printEngineer();

pE2->printEngineer();

deletepE1,pE2;

return0;

}

⑸运行结果

⑹思考题及问题

删除Engineer()构造函数,程序是否还能正常运行?

删除deletepE1,pE2;语句,会造成什么后果?

程序运行的结果又是什么?

3.实验10自测题4

⑴定义一个计算机类Computer,其成员数据包括计算机编号id、品牌brand、主频mainFrequency和硬盘大小hardDisk,实现一个打印自身信息的成员函数printComputer()。

定义默认构造函数、带所有成员数据的构造函数和拷贝构造函数。

设某单位有5个品牌都是“IBM”的计算机,使用带所有成员数据的构造函数生成一个计算机对象,使用拷贝构造函数生成另外4个汽车对象,并通过调用修改编号、主频和硬盘大小的成员函数进行相应调整。

最后调用printComputer()打印所有计算机对象的信息。

⑵要求

给出Computer类的拷贝构造函数和析构函数

⑶思路

参考教材中“拷贝构造函数”的相关代码

⑷将下面程序代码补充完整,并运行

#include//包含头文件iostream

usingnamespacestd;//使用命名空间std

classComputer

{public:

Computer();

Computer(intpId,constchar*pBrand,floatpMainFrequency,floatpHardDisk);

Computer(Computer&Cp);

~Computer();

voidprintComputer();

voidsetId(intpId);

voidsetMainFrequency(floatpMainFrequency);

voidsetHardDisk(floatpHardDisk);

private:

intid;

char*brand;

floatmainFrequency;

floathardDisk;

//Computer类的定义

};

Computer:

:

Computer()

{

cout<<"Constructedwithoutanyparameter."<

}

Computer:

:

Computer(intpId,constchar*pBrand,floatpMainFrequency,floatpHardDisk)

{id=pId;

brand=newchar[strlen(pBrand)+1];

if(pBrand!

=0)

strcpy(brand,pBrand);

mainFrequency=pMainFrequency;

hardDisk=pHardDisk;

//Computer带参数的构造函数实现

cout<<"Constructedwithallparameters."<

}

Computer:

:

Computer(Computer&Cp)

{

id=Cp.id;

brand=newchar[strlen(Cp.brand)+1];

if(Cp.brand!

=0)

strcpy(brand,Cp.brand);

mainFrequency=Cp.mainFrequency;

hardDisk=Cp.hardDisk;

//Computer拷贝构造函数的实现

cout<<"CopyConstucted."<

}

Computer:

:

~Computer()

{

delete[]brand;

cout<<"Deconstructed."<

}

voidComputer:

:

printComputer()

{

cout<<"id:

"<

<<"brand:

"<

<<"mainFrequency:

"<

<<"hardDisk:

"<

}

voidComputer:

:

setId(intpId)

{

id=pId;

}

voidComputer:

:

setMainFrequency(floatpMainFrequency)

{mainFrequency=pMainFrequency;

//设置主频值

}

voidComputer:

:

setHardDisk(floatpHardDisk)

{hardDisk=pHardDisk;

//设置硬盘大小

}

intmain()

{

Computercomputer1(1001,"IBM",1.8f,500.f);

Computercomputer2=computer1;

computer2.setId(1002);

computer2.setMainFrequency(2.f);

computer2.setHardDisk(1000.f);

Computercomputer3=computer1;

computer3.setId(1003);

computer3.setMainFrequency(2.5f);

computer3.setHardDisk(1500.f);

Computercomputer4=computer1;

computer4.setId(1004);

computer4.setMainFrequency(2.f);

computer4.setHardDisk(1200.f);

computer1.printComputer();

computer2.printComputer();

computer3.printComputer();

computer3.printComputer();

computer4.printComputer();

return0;

}⑸运行结果

⑹思考题及问题

删除拷贝构造函数,程序还是否能够正常运行?

 

4.编程题

⑴题目:

创建一个名为Account的类,银行可以使用它表示客户的银行帐户。

这个类应该包括一个类型为double的数据成员,表示帐户余额。

这个类必须提供一个构造函数,它接受初始余额并用它初始化数据成员。

这个构造函数应当确认初始余额的有效性,保证它大于或等于0.否则,余额应当设置为0,并且构造函数必须显示一条错误信息,指出初始余额是无效的。

该类还要提供三个成员函数。

成员函数credit将一笔金额加到当前余额中。

debit将从这个Account中取钱,并保证取出金额不超过此Account的余额。

如果不是这样,余额不变,函数打印一条信息,指出“Debitamountexceededaccountbalace.”。

成员函数getBalance将返回当前余额。

⑵要求:

根据题目要求,写出类和应用程序的设计思路和程序代码。

⑶思路:

1类设计:

创建一个名为Account的类,包括一个类型为double的数据成员money,表示帐户余额,余额初始化为0。

构造函数Account()credit()

 

2应用程序设计:

(主函数中,定义对象及调用对象的成员函数)

 

⑷程序代码:

#include

usingnamespacestd;

classaccount

{public:

account()

{

id=1;

money=10000000;

}

account(intPId,doublePMoney);

voidcredit(doublePMoney);

voiddebit(doublePMoney);

voidprintAccount();

voidgetBalance(doublePMoney);

private:

intid;

doublemoney;

};

account:

:

account(intPId,doublePMoney)

{

id=PId;

if(PMoney>0)

money=PMoney;

else

{cout<<"余额初始化失败了哦"<

money=0;}

}

voidaccount:

:

credit(doublePMoney)

{money=money+PMoney;}

voidaccount:

:

debit(doublePMoney)

{money=money-PMoney;

if(money<0)

{

getBalance(PMoney);

cout<<"Debitamountexceededaccountbalace."<

}

}

voidaccount:

:

getBalance(doublePMoney)

{

money=money+PMoney;

}

voidaccount:

:

printAccount()

{cout<<"id"<

}

intmain()

{accounta(1,100);

a.printAccount();

a.debit(100);

a.printAccount();

accountaa(2,200);

aa.printAccount();

aa.credit(200);

aa.printAccount();

accountaaa(3,300);

aaa.printAccount();

aaa.printAccount();

return0;

}

 

⑸运行结果

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

当前位置:首页 > 工程科技 > 电子电路

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

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