c++类与对象习题答案精品文档收集于网络,如有侵权请联系管理员删除1.概念填空题1.1类定义的关键字是class。类的数据成员通常指定为私有成员。类的函数成员通常指定为公有成员,指定为公有的类成员可以在类对象所在域中的任何位置访问它们,类的私有和保护只能被该类的成员函数或友元函数访问。1.2类的访问限定符包括public、private和protected。类成员默认的访问方式是private。访问限定符在类中无先后次序,各限定符允许(允许/不允许)多次出现。1.3构造函数的任务是建立对象。类中可以有多个构造函数,它们由参数区分。如果类说明中没有给出构造函数,则C++编译器会提供构造函数,该函数不完成(完成/不完成)对象初始化工作。1.4复制构造函数的参数是对象的复制,当程序没有给出复制构造函数时,编译系统会提供默认复制构造函数,完成类对象的复制。复制构造函数被调用情况有3种。1.5析构函数在对象释放时被自动调用。类中没有定义析构函数时,编译系统会提供一个默认的析构函数。该函数不完成(完成/不完成)具体对象的清理工作。2.简答题2.1为什么说类与对象的概念是客观世界的反映?2.2简单解释什么是面向对象程序设计的封装性。2.3引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为引用?为什么返回值为引用的函数可以作为左值?2.4什么是默认的构造函数?默认的构造函数可以有多少个?2.5复制构造函数用于哪3个方面?2.6为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符”.”再加对象成员名?2.7类的静态数据成员与函数中的静态成员有何异同?2.8类的成员函数在什么情况下应该定义为私有的?这样做的目的是什么?2.9友元关系有何性质?友元关系的优点和缺点各有哪些?3.选择题3.1数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是(B)。A.类B.对象C.函数体D.数据块3.2类的实例化是指(B)。A.定义类B.创建类的对象C.指明具体类D.调用类的成员3.3下列说法中正确的是(B)。A.类定义中只能说明函数成员的函数头,不能定义函数体B.类中的函数成员可以在类体中定义,也可以在类体之外定义C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中D.在类体之外定义的函数成员不能操作该类的私有数据成员3.4有如下类定义:精品文档收集于网络,如有侵权请联系管理员删除classsample{intn;public:sample(inti=0):n(i){}voidsetValue(intn0);};下列关于setValue成员函数的实现中,正确的是(B)。A.sample::setValue(intn0){n=n0;}B.voidsample::setValue(intn0){n=n0;}C.voidsetValue(intn0){n=n0;}D.setValue(intn0){n=n0;}3.5在下面的类定义中,错误的语句是(C)。classsample{public:sample(intval);//①~sample();//②private:inta=2.5;//③public:sample();//④};A.①B.②C.③D.④3.6类的构造函数被自动调用执行的情况是在创建该类的(C)。A.成员函数时B.数据成员时C.对象时D.友元函数时3.7(A)是析构函数的特征。A.一个类中只能定义一个析构函数B.析构函数名与类名不同C.析构函数的定义只能在类体内D.析构函数可以有一个或多个参数3.8在下列函数原型中,可以作为类AA构造函数的是(D)。A.voidAA(int);B.intAA();C.AA(int)const;D.AA(int)3.9关于成员函数特征的下述描述中,(A)是错误的。A.成员函数一定是内联函数B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的3.10不属于成员函数的是(B)。A.静态成员函数B.友元函数C.构造函数D.析构函数3.11已知类A是类B的友元,类B是类C的友元,则(C)。A.类A一定是类C的友元B.类C一定是类A的友元精品文档收集于网络,如有侵权请联系管理员删除C.类C的成员函数可以访问类B的对象的任何成员D.类A的成员函数可以访问类B的对象的任何成员3.12有如下类定义:classAA{inta;public:intgetRef()const{return&a;}//①返回类型为int,return&a为地址intgetValue()const{returna;}//②voidset(intn)const{a=n;}//③常函数不能修改成员friendvoidshow(AAaa)const{couta;}//④友元函数不能是常函数};其中的四个函数定义中正确的是(B)。A.①B.②C.③D.④3.13有如下类定义:classTest{public:Test(){a=0;c=0;}//①常成员必须在初始化列表中初始化intf(inta)const{this-a=a;}//②常函数不能修改成员voidh(intb){Test::b=b;};//③staticintg(){returna;}//④静态函数要通过对象访问成员private:inta;staticintb;constintc;};intTest::b=0;在标注号码的行中,能被正确编译的是(C)。A.①B.②C.③D.④4写出程序程序执行结果。4.1#includeiostreamusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum(){returnn;}private:精品文档收集于网络,如有侵权请联系管理员删除staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout”n=”Test::getNum()endl;return0;}n=04.2#includeiostreamusingnamespacestd;classAA{intn;public:AA(intk):n(k){}intget(){returnn;}intget()const{returnn+1;}};intmain(){AAa(5);constAAb(6);couta.get()”,”b.get();return0;}574.3#includeiostreamusingnamespacestd;classMyClass{public:intnumber;voidset(inti);};intnumber=3;voidMyClass::set(inti){number=i;}voidmain(){MyClassmy1;intnumber=10;my1.set(5);coutmy1.numberendl;my1.set(number);coutmy1.numberendl;精品文档收集于网络,如有侵权请联系管理员删除my1.set(::number);coutmy1.number;}51034.4#includeiostreamusingnamespacestd;classTest{private:staticintval;inta;public:staticintfunc();voidsfunc(Test&r);};intTest::val=200;intTest::func(){returnval++;}voidTest::sfunc(Test&r){r.a=125;coutResult3=r.aendl;}voidmain(){coutResult1=Test::func()endl;Testa;coutResult2=a.func()endl;a.sfunc(a);}Result1=200Result2=201Result1==1255.编程题5.1构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月用枚举类型,并完成测试(包括用成员函数和用普通函数)。#includeiostream.h#includeconio.h#includeiomanip.henumYR{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005};//枚举名必须是标识符enumMT{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};classTimedate{private:YRyear;MTmonth;精品文档收集于网络,如有侵权请联系管理员删除intdate;inthh;intmm;intss;public:Timedate(){year=Y2000;month=Jan;date=1;hh=0;mm=0;ss=0;}Timedate(YRa,MTb,intc){year=a;month=b;date=c;hh=12;mm=30;ss=0;}voidgetdate(YR&,MT&,int&);//体会用引用的优点,一次可返回3个值voidgettime(int&,int&,int&);voidputdate(YR,MT,int);voidputtime(int,int,int);voidlist();};voidTimedate::getdate(YR&y,MT&m,int&d){y=year;m=month;d=date;}voidTimedate::gettime(int&a,int&b,int&c){a=hh;b=mm;c=ss;}voidTimedate::putdate(YRa,MTb,intc){year=a;month=b;date=c;}voidTimedate::puttime(inta,intb,intc){hh=a;mm=b;ss=c;}voidTimedate::list(){//成员函数coutyear/month/date:;switch(year){caseY2000:cout2000;break;caseY2001:cout2001;break;精品文档收集于网络,如有侵权请联系管理员删除caseY2002:cout2002;break;caseY2003:cout2003;break;caseY2004:cout2004;break;caseY2005:cout2005;break;}switch(month){//,,,,,,,,caseJan:cout'/'Jan;break;caseFeb:cout'/'Feb;break;caseMar:cout'/'Mar;break;caseApr:cout'/'Apr;break;caseMay:cout'/'May;break;caseJun:cout'/'Jun;break;caseJul:cout'/'Jul;break;caseAug:cout'/'Aug;break;caseSep:cout'/'Sep;break;caseOct:cout'/'Oct;break;caseNov:cout'/'Nov;break;caseDec:cout'/'Dec;break;}cout'/'dateendl;couthour:minite:second:;couthh':'mm':'ssendl;}voidshow(Timedate&td){//普通函数,体会两者的不同YRyear;MTmonth;intdate,hh,mm,ss;td.ge