C面向对象课后练习答案.doc_第1页
C面向对象课后练习答案.doc_第2页
C面向对象课后练习答案.doc_第3页
C面向对象课后练习答案.doc_第4页
C面向对象课后练习答案.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

类与对象习题程序阅读题 1.分析以下程序执行的结果 #include #include class Sample public: int x,y; Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=yendl; ; void main() Sample s1(2,3); s1.disp(); 分析:本题说明了重载构造函数的定义方法。首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员。所以输出为:x=2,y=3。 注意:构造函数是唯一不能被显式调用的成员函数,它在定义类的对象时自动调用,也称为隐式调用。 - 题 2.分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; Sample() if(x=y) coutx=yendl; else coutx!=yendl; void disp() coutx=x,y=yendl; ; void main() Sample s1(2,3); s1.disp(); 分析:本题说明了析构函数的定义方法。首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员,最后在退出程序时自动调用析构函数。所以输出为: x=2,y=3 x!=y 注意:析构函数在对象的作用域结束时被自动隐式调用。 - 题 3.分析以下程序的输出结果 #include class Sample int x; public: Sample(int a) x=a; coutconstructing object:x=xendl; ; void func(int n) static Sample obj(n); void main() func(1); func(10); 分析:本题说明静态对象构造函数的调用情况,由于在func()函数中定义的对象obj是静态对象,故只被构造一次,所以输出为: counstructing object:x=1 注意:静态对象和静态变量一样,只被构造一次。块作用域的静态变量,在首次进入到定义该静态对象的函数时,构造该静态对象,以后进入该函数时不再构造静态对象。 - 题 4 分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=ydisp(); 分析:本题说明了对象指针的使用方法。这里通过指向对象的指针来调用对象的成员函数。对象指针p指向对象s,p-disp()等价于s.disp()。所以输出为: x=2,y=3题 5 分析以下程序的执行结果 #include class Sample public: int x; int y; void disp() coutx=x,y=yendl; ; void main() int Sample:*pc; Sample s; pc=&Sample:x; s.*pc=10; pc=&Sample:y; s.*pc=20; s.disp(); 解:本题说明了类数据成员指针的使用方法。在main()中定义的pc是一个指向Sample类数据成员的指针。执行pc=&Sample:x时,pc指向数据成员x,语句s.*pc=10等价于s.x=10(为了保证该语句正确执行,Sample类中的x必须是公共成员);执行pc=&Sample:y时,pc指向数据成员y,语句s.*pc=20等价于s.y=20(同样,Sample类中的y必须是公共成员)。所以输出为: x=10,y=20。 - 编程题题1 下面是一个类的测试程序,设计出能使用如下测试程序的类。 void main() Test a; a.init(68,55); a.print(); 其执行结果为: 测试结果:68-55=13 分析:本题是要设计Test类,其设计方法很多,这里给出一种解法。Test类包含两个私有数据成员x、y,以及两个公共成员函数init()和print(),前者用于给数据成员赋值,后者用于x,y的减法运算和输出相应的结果。 参考代码#include class Test int x,y; public: void init(int,int); void print(); ; void Test:init(int i,int j) x=i;y=j; void Test:print() cout测试结果:x-y=x-yendl; 注意:类是一个外壳,它包含了类实例化时数据和代码的使用方法,它是一种模板,只有在定义类的对象时,才为对象分配空间,而不会为类分配空间。 - 题 2 设计一个Bank类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。 解:Bank类包括私有数据成员top(当前账指针),date(日期),money(金额),rest(余额)和sum(累计余额)。另有一个构造函数和三个成员函数bankin()(处理存入账),bankout()处理取出账)和disp() (输出明细账)。 参考代码: #include #include #define Max 100 class Bank int top; char dateMax10; / 日期 int moneyMax; / 金额 int restMax; / 余额 static int sum; / 累计余额 public: Bank()top=0; void bankin(char d,int m) strcpy(datetop,d); moneytop=m; sum=sum+m; resttop=sum; top+; void bankout(char d,int m) strcpy(datetop,d); moneytop=-m; sum=sum-m; resttop=sum; top+; void disp(); ; int Bank:sum=0; void Bank:disp() int i; printf( 日期存入 取出余额n); for(i=0;itop;i+) printf(%8s,datei); if(moneyi0) printf( %6d,-moneyi); else printf(%6d ,moneyi); printf(%6dn,resti); void main() Bank obj; obj.bankin(2001.2.5,1000); obj.bankin(2001.3.2,2000); obj.bankout(2001.4.1,500); obj.bankout(2001.4.5,800); obj.disp(); 本程序的执行结果如下: 日期 存入 取出 余额 2001.2.5 1000 1000 2001.3.2 2000 3000 2001.4.1 500 2500 2001.4.5 800 1700 3 创建一个employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、changname()、display()的函数的原型放在类定义中,构造函数初始化每个成员,display()函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。 参考代码 #include #include class employee protected: char name10; / 姓名 char street20; / 街道地址 char city10; / 市 char prov10; / 省 char post7; / 邮政编码 int no; / 记录序号 public: employee(char ,char ,char ,char ,char ,int); void changename(char str); void display(); ; employee:employee(char n,char s,char c,char p1,char p2,int num) strcpy(name,n); strcpy(street,s); strcpy(city,c); strcpy(prov,p1); strcpy(post,p2); no=num; void employee:changename(char n) strcpy(name,n); void employee:display() cout输出记录 noendl; cout 姓名:nameendl; cout街道地址:streetendl; cout 市:cityendl; cout 省:provendl; cout邮政编码postendl; void main() employee obj1(王华,中华路15号,武汉市,湖北省,430070,1); employee obj2(杨丽,天津路30号,南京市,江苏市,210020,2); obj1.display(); obj2.display(); 本程序的执行结果如下: 输出记录1 姓名:王华 街道地址:中华路15号 市:武汉市 省:湖北省 邮政编码:430070 输出记录2 姓名:杨丽 街道地址:天津路30号 市:南京市 省:江苏省 邮政编码:210020 - 题4编写一个程序,在已设置好若干个用户名/口令后,通过输入用户名,查找对应的口令,连续执行这一过程直到用户输入结束标记(“end“)为止。 解: 设计一个User类,数据成员有User和pass两个字符数组,存储用户名和口令,另有一个构造函数和getuaer()、getpass()两个成员函数,用于获取用户名和口令。在main()中设计一个对象数组ua,当用户输入一个用户名后,在ua中查找,找到后输出对应的口令,找不到时输出相应的提示信息。 参考代码: #include #include class User char user10; char pass7; public: User(char ,char ); char *getuser(); char *getpass(); ; User:User(char u,char p) strcpy(user,u); strcpy(pass,p); char *User:getuser() return user; char *User:getpass() return pass; void main() User ua=User(Li,123456),User(wang,654321), User(Chen,213412),User(Xu,878616), User(Ma,876574),User(Song,666666); char name10;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论