实验10.docx
- 文档编号:29862000
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:16
- 大小:62.16KB
实验10.docx
《实验10.docx》由会员分享,可在线阅读,更多相关《实验10.docx(16页珍藏版)》请在冰豆网上搜索。
实验10
实验10类与对象1
(2)
请将自己报告部分,文字和程序代码,加粗
完成下面实验内容和实验要求。
自测练习
1.实验10自测题2
⑴定义一个书籍类Book,其成员数据包括名称name、作者author、出版社press和页数numberOfPages。
实现一个打印自身信息的内联成员函数printBook(),将修改出版社的函数setPress()实现为带默认参数值的函数,默认的参数为”清华大学出版社”。
生成一个出版社为”高等教育出版社”的Book对象,调用setPress()成员函数将出版社修改为”清华大学出版社”,调用printBook()成员函数打印修改出版社前后的对象信息。
⑵要求
给出缺省构造函数和带所有成员数据的构造函数
⑶思路
参考教材中“类的成员函数为带默认参数值的函数和内联成员函数”的相关代码
⑷将下面程序代码补充完整,并运行
#include
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 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 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; } ⑸运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 10