1、实验10实验10类与对象1(2)请将自己报告部分,文字和程序代码,加粗完成下面实验内容和实验要求。 自测练习 1实验10自测题2 定义一个书籍类Book,其成员数据包括名称name、作者author、出版社press和页数numberOfPages。实现一个打印自身信息的内联成员函数printBook(),将修改出版社的函数setPress()实现为带默认参数值的函数,默认的参数为”清华大学出版社”。生成一个出版社为”高等教育出版社”的Book对象,调用setPress()成员函数将出版社修改为”清华大学出版社”,调用printBook()成员函数打印修改出版社前后的对象信息。 要求给出缺省构
2、造函数和带所有成员数据的构造函数 思路参考教材中“类的成员函数为带默认参数值的函数和内联成员函数”的相关代码将下面程序代码补充完整,并运行#include / 包含头文件iostreamusing namespace std; / 使用命名空间stdclass Bookpublic: Book(); Book(const char* pName, const char* pAuthor,const char* pPress, int pNumberOfPages); void setPress(const char* pPress); void printBook(); Book();priv
3、ate: char* name; char* author; char* press; int numberOfpages; / 类Book的定义;Book:Book()*name;*author;*press;numberOfpages; /Book缺省构造函数的实现Book:Book(const char* pName,const char* pAuthor,const char* pPress, int pNumberOfPages)name= new charstrlen(pName)+1;if(pName!=0)strcpy(name,pName);author= new chars
4、trlen(pAuthor)+1;if(pAuthor!=0)strcpy(author,pAuthor);press= new charstrlen(pPress)+1;if(pPress!=0)strcpy(press,pPress);numberOfpages=pNumberOfPages;/ Book带所有成员数据的构造函数的实现inline void Book:printBook()coutnamename authorauthor presspress numberOfpagesnumberOfpagesendl;/ Book内联成员函数printBook的实现void Book:
5、setPress(const char* pPress=清华大学出版社)press= new charstrlen(pPress)+1;if(pPress!=0)strcpy(press,pPress);/ Book成员函数setPress的实现Book:Book()deletename;deleteauthor;deletepress;int main() Book bk(微机原理与接口技术,姚琳,高等教育出版社,271); bk.printBook(); bk.setPress(); bk.printBook(); return 0; 运行结果 思考题及问题考虑如何将内联成员函数setPr
6、ess实现为另外一种形式(不使用关键字inline)?2实验10自测题3 定义一个工程师类Engineer,其成员数据包括编号id、姓名name和职称position,实现一个打印自身信息的成员函数printEngineer(),定义一个包含4个工程师对象的对象数组,并使用new运算符申请两个匿名对象。调用printEngineer()打印所有对象的信息。 要求给出Engineer类的构造函数和析构函数 思路参考实验10练习题3及教材中“对象数组和对象指针”的相关代码将下面程序代码补充完整,并运行#include / 包含头文件iostreamusing namespace std; / 使用
7、命名空间stdclass Engineerpublic:Engineer(); Engineer (int pId, char* pName, char* pPosition); void setEngineer (int pId, char* pName, char* pPosition); Engineer(); void printEngineer();private: int id; char*name; char*position; /类Engineer的定义;Engineer: Engineer (int pId, char* pName, char* pPosition)id=p
8、Id;name=new charstrlen(pName)+1;if(pName!=0) strcpy(name,pName);position=new charstrlen(pPosition)+1;if(pPosition!=0) strcpy(position,pPosition); /Engineer的构造函数的实现void Engineer: setEngineer (int pId, char* pName, char* pPosition)id=pId;name=new charstrlen(pName)+1;if(pName!=0)strcpy(name,pName);posi
9、tion=new charstrlen(pPosition)+1;if(pPosition!=0)strcpy(position,pPosition); /Engineer的成员函数setEngineer的实现Engineer: Engineer ()deletename;deleteposition;/Engineer的析构函数的实现void Engineer:printEngineer ()coutidid namename positionpositionprintEngineer (); pE2-printEngineer (); delete pE1, pE2; return 0;
10、运行结果 思考题及问题删除Engineer ()构造函数,程序是否还能正常运行?删除delete pE1,pE2;语句,会造成什么后果?程序运行的结果又是什么?3实验10自测题4 定义一个计算机类Computer,其成员数据包括计算机编号id、品牌brand、主频mainFrequency和硬盘大小hardDisk,实现一个打印自身信息的成员函数printComputer()。定义默认构造函数、带所有成员数据的构造函数和拷贝构造函数。设某单位有5个品牌都是“IBM”的计算机,使用带所有成员数据的构造函数生成一个计算机对象,使用拷贝构造函数生成另外4个汽车对象,并通过调用修改编号、主频和硬盘大小
11、的成员函数进行相应调整。最后调用printComputer()打印所有计算机对象的信息。 要求给出Computer类的拷贝构造函数和析构函数 思路参考教材中“拷贝构造函数”的相关代码 将下面程序代码补充完整,并运行#include / 包含头文件iostreamusing namespace std; / 使用命名空间stdclass Computerpublic: Computer (); Computer (int pId,const char* pBrand,float pMainFrequency, float pHardDisk); Computer (Computer & Cp);
12、 Computer (); void printComputer (); void setId(int pId); void setMainFrequency(float pMainFrequency); void setHardDisk(float pHardDisk); private: int id; char* brand; float mainFrequency; float hardDisk; / Computer类的定义;Computer: Computer () coutConstructed without any parameter.endl;Computer: Compu
13、ter (int pId,const char* pBrand,float pMainFrequency, float pHardDisk)id=pId;brand=new charstrlen(pBrand)+1;if(pBrand!=0)strcpy(brand,pBrand);mainFrequency=pMainFrequency;hardDisk=pHardDisk; / Computer带参数的构造函数实现 coutConstructed with all parameters.endl;Computer: Computer (Computer & Cp)id=Cp.id;bran
14、d=new charstrlen(Cp.brand)+1;if(Cp.brand!=0)strcpy(brand,Cp.brand);mainFrequency=Cp.mainFrequency;hardDisk=Cp.hardDisk; / Computer拷贝构造函数的实现 coutCopy Constucted.endl;Computer: Computer () delete brand; coutDeconstructed.endl;void Computer:printComputer () coutid: id, brand: brand, mainFrequency: main
15、Frequency, hardDisk: hardDiskendl;void Computer:setId(int pId) id=pId;void Computer:setMainFrequency(float pMainFrequency)mainFrequency=pMainFrequency; /设置主频值void Computer:setHardDisk(float pHardDisk)hardDisk=pHardDisk; /设置硬盘大小int main() Computer computer1(1001,IBM,1.8f,500.f); Computer computer2=co
16、mputer1; computer2.setId(1002);computer2.setMainFrequency(2.f);computer2.setHardDisk(1000.f); Computer computer3= computer1; computer3.setId(1003);computer3.setMainFrequency(2.5f);computer3.setHardDisk(1500.f); Computer computer4= computer1; computer4.setId(1004);computer4.setMainFrequency(2.f);comp
17、uter4.setHardDisk(1200.f); computer1.printComputer (); computer2.printComputer (); computer3.printComputer (); computer3.printComputer (); computer4.printComputer (); return 0; 运行结果 思考题及问题删除拷贝构造函数,程序还是否能够正常运行?4编程题 题目:创建一个名为Account的类,银行可以使用它表示客户的银行帐户。这个类应该包括一个类型为double的数据成员,表示帐户余额。这个类必须提供一个构造函数,它接受初始
18、余额并用它初始化数据成员。这个构造函数应当确认初始余额的有效性,保证它大于或等于0.否则,余额应当设置为0,并且构造函数必须显示一条错误信息,指出初始余额是无效的。该类还要提供三个成员函数。成员函数credit将一笔金额加到当前余额中。debit将从这个Account中取钱,并保证取出金额不超过此Account的余额。如果不是这样,余额不变,函数打印一条信息,指出“Debit amount exceeded account balace.”。成员函数getBalance将返回当前余额。要求:根据题目要求,写出类和应用程序的设计思路和程序代码。 思路:1类设计:创建一个名为Account的类,包
19、括一个类型为double的数据成员money,表示帐户余额, 余额初始化为0。构造函数Account() credit()2应用程序设计:(主函数中,定义对象及调用对象的成员函数)程序代码:#include using namespace std; class accountpublic: account() id=1; money=10000000; account(int PId,double PMoney); void credit(double PMoney); void debit(double PMoney); void printAccount(); void getBalanc
20、e(double PMoney);private: int id; double money;account:account(int PId,double PMoney) id=PId;if(PMoney0)money=PMoney;elsecout余额初始化失败了哦 endl;money=0;void account:credit(double PMoney)money=money+PMoney;void account:debit(double PMoney)money=money-PMoney;if(money0) getBalance(PMoney); coutDebit amount
21、 exceeded account balace.endl; void account:getBalance(double PMoney) money=money+PMoney; void account:printAccount() coutidid money moneyendl; int main()account a(1,100);a.printAccount();a.debit(100); a.printAccount(); account aa(2,200); aa.printAccount(); aa.credit(200); aa.printAccount(); account aaa(3,300);aaa.printAccount();aaa.printAccount();return 0;运行结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1