VisualC++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案_第1页
VisualC++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案_第2页
VisualC++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案_第3页
VisualC++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案_第4页
VisualC++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、1为什么要引入构造函数和析构函数?对象的初始化是指对象数据成员的初始化,在使用对象前,一定要初始化。由于数据成员一般为私有的(private),所以不能直接赋值。对对象初始化有以下两种方法:类中提供一个普通成员函数来初始化,但是会造成使用上的不便(使用对象前必须显式调用该函数)和不安全(未调用初始化函数就使用对象)。当定义对象时,编译程序自动调用构造函数。析构函数的功能是当对象被撤消时,释放该对象占用的内存空间。析构函数的作用与构造函数正好相反,一般情况下,析构函数执行构造函数的逆操作。在对象消亡时,系统将自动调用析构函数,执行一些在对象撤消前必须执行的清理任务。类的公有、私有和保护成员之间的

2、区别是什么?私有成员private:私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的一些数据成员,私有成员只能由本类的成员函数或某些特殊说明的函数(如第4章讲到的友员函数)访问,而类的外部根本就无法访问,实现了访问权限的有效控制,使数据得到有效的保护,有利于数据的隐藏,使内部数据不能被任意的访问和修改,也不会对该类以外的其余部分造成影响,使模块之间的相互作用被降低到最小。private成员若处于类声明中的第一部分,可省略关键字private。公有成员public:公有成员对外是完全开放的,公有成员一般是成员函数,它提供了外部程序与类的接口功能,用户通过公有成员访问该类对象中的数据。

3、保护成员protected:只能由该类的成员函数,友元,公有派生类成员函数访问的成员。保护成员与私有成员在一般情况下含义相同,它们的区别体现在类的继承中对产生的新类的影响不同,具体内容将在第5章中介绍。缺省访问控制(未指定private、protected、public访问权限)时,系统认为是私有private成员。什么是拷贝构造函数,它何时被调用?拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它;其形参是本类对象的引用,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中。在以下四种情况下系

4、统会自动调用拷贝构造函数:用类的一个对象去初始化另一个对象catcat1;catcat2(catl);/创建cat2时系统自动调用拷贝构造函数,/用cat1初始化cat2。用类的一个对象去初始化另一个对象时的另外一种形式Catcat2=cat1;/注意并非catcat1,cat2;cat2=cat1;对象作为函数参数传递时,调用拷贝构造函数。f(cata)/定义f函数,形参为cat类对象catb;/定义对象bf(b);/进行f函数调用时,系统自动调用拷贝构造函数如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数。设计一个计数器类,当建立该类的对象时其初始状态为0,考虑为计数器定义哪些

5、成员?/counter.h#ifndefcounter_h#definecounter_hclasscounterprivate:intcount;public:counter();voidsetCount(inti);intgetCount();voiddisplayCount();voidincrementCount();voiddecrementCount();counter();#endif/counter.cpp#includecounter.h#includecounter:counter()count=0;voidcounter:displayCount()coutcounten

6、dl;intcounter:getCount()returncount;voidcounter:setCount(inti)count=i;voidcounter:incrementCount()count+;voidcounter:decrementCount()count-;/MAIN.CPP#includecounter.h#includevoidmain()counterc1;c1.displayCount();c1.setCount(4);c1.displayCount();for(inti=0;i=10;i+)c1.incrementCount();c1.displayCount(

7、);5.定义一个时间类,能提供和设置由时、分、秒组成的时间,并编写出应用程序,定义时间对象,设置时间,输出该对象提供的时间。#includeclassTimeinthour,minute,second;public:Time(inth=0,intm=0,ints=0)hour=h;minute=m;second=s;voidsetHour(inth)hour=h;voidsetMinute(intm)minute=m;voidsetSecond(ints)second=s;voiddisplay()couthour:minute:secondendl;voidmain()Timet;t.dis

8、play();t.setHour(13);t.setMinute(15);t.setSecond(30);t.display();6.设计一个学生类student,它具有的私有数据成员是:注册号、姓名、数学、英语、计算机成绩;具有的公有成员函数是:求三门课总成绩的函数sum;求三门课平均成绩的函数average;显示学生数据信息的函数print;获取学生注册号的函数get_reg_num;设置学生数据信息的函数set_stu_inf。编制主函数,说明一个student类对象的数组并进行全班学生信息的输入与设置,而后求出每一学生的总成绩、平均成绩、全班学生总成绩最高分、全班学生总平均分,并在输入

9、一个注册号后,输出该学生有关的全部数据信息。#include#includeusingnamespacestd;classStudentprivate:intnum;charname10;floatmath;floatenglish;floatcomputer;public:voidset_stu_inf(intn,char*ch,floatm,floate,floatc)num=n;strcpy(name,ch);math=m;english=e;computer=c;floatsum()return(math+english+computer);floataverage()return(m

10、ath+english+computer)/3;intget_reg_num()returnnum;voidprint()cout学号:numendlqweazx;if(q=0)break;stucount+.set_stu_inf(q,we,a,z,x);if(maxa+z+x);elsemax=a+z+x;aver+=(a+z+x);/输出所有学生信息cout学生信息为:endlendl;for(i=0;icount;i+)stui.print();coutendl;cout全班学生总成绩最高分为maxendlq;for(i=0;icount;i+)if(q=stui.get_reg_nu

11、m()cout此学生信息为:endl;stui.print();break;if(i=count)cout查无此人endl;7.模拟栈模型的操作,考虑顺序栈和链栈两种形式。链栈:#includeiostream.hclassStackstructNodeintcontent;Node*next;*top;public:Stack()top=NULL;boolpush(inti);boolpop(int&i);/定义堆栈类/构造函数的定义压栈成员函数的声明弹栈成员函数的声明/压栈成员函数的定义boolStack:push(inti)Node*p=newNode;if(p=NULL)coutcon

12、tent=i;p-next=top;top=p;returntrue;boolStack:pop(int&i)/弹栈成员函数的定义if(top=NULL)coutnext;i=p-content;deletep;returntrue;voidmain()Stackst1,st2;intx;for(inti=1;i=5;i+)st1.push(i);st2.push(i);coutstack1:endl;for(i=1;i=3;i+)st1.pop(x);coutxendl;/定义对象stl和st2/压栈成员函数的调用/压栈成员函数的调用/弹栈成员函数的调用st1.push(20);for(i=1;i=4;i+)i

温馨提示

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

评论

0/150

提交评论