您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > C++给学生习题第6章练习题
第6章练习题同步练习6.1一、选择题1.下列类的定义中正确的是()。(A)classa{intx=0;inty=1;}(B)classb{intx=0;inty=1;};(C)classc{intx;inty;}(D)classd{intx;inty;};2.在类定义的外部,可以被访问的成员有()。(A)所有类成员(B)private或protected的类成员(C)public的类成员(D)public或private的类成员3.下列关于类和对象的说法中,正确的是()。(A)编译器为每个类和类的对象分配内存(B)类的对象具有成员函数的副本(C)类的成员函数由类来调用(D)编译器为每个对象的数据成员分配内存4.关于this指针的说法正确的是()。(A)this指针必须显式说明(B)定义一个类后,this指针就指向该类(C)成员函数拥有this指针(D)静态成员函数拥有this指针【解答】DCDC二、程序练习1.阅读程序,写出运行结果。#includeiostreamusingnamespacestd;classA{public:intf1();intf2();voidsetx(intm){x=m;coutxendl;}voidsety(intn){y=n;coutyendl;}intgetx(){returnx;}intgety(){returny;}private:intx,y;};intA::f1(){returnx+y;}intA::f2(){returnx-y;}intmain(){Aa;a.setx(10);a.sety(5);couta.getx()'\t'a.gety()endl;couta.f1()'\t'a.f2()endl;}【解答】同步练习6.2一、选择题1.下面对构造函数的不正确描述是()。(A)用户定义的构造函数不是必须的(B)构造函数可以重载(C)构造函数可以有参数,也可以有返回值(D)构造函数可以设置默认参数2.下面对析构函数的正确描述是()。(A)系统在任何情况下都能正确析构对象(B)用户必须定义类的析构函数(C)析构函数没有参数,也没有返回值(D)析构函数可以设置默认参数3.构造函数是在()时被执行的。(A)建立源程序文件(B)创建对象(C)创建类(D)程序编译时4.在下列函数原型中,可以作为类Base析构函数的是()。(A)void~Base(B)~Base()(C)~Base()const(D)Base()5.下面关于复制构造函数调用的时机,不正确的是()调用。(A)访问对象时(B)对象初始化时(C)函数具有类类型传值参数时(D)函数返回类类型值时6.说明一个类的对象时,系统自动调用()。(A)成员函数(B)构造函数(C)析构函数(D)友元函数7.程序中撤销一个类对象时,系统自动调用()。(A)成员函数(B)构造函数(C)析构函数(D)友元函数【解答】CCBBABC同步练习6.3一、选择题1.在下列选项中,()不是类的成员函数。(A)构造函数(B)析构函数(C)友元函数(D)复制构造函数2.下面对友元的错误描述是()。(A)关键字friend用于声明友元(B)一个类中的成员函数可以是另一个类的友元(C)友元函数访问对象的成员不受访问特性影响(D)友元函数通过this指针访问对象成员3.已知类A是类B的友元,类B是类C的友元,则下面选项描述正确的是()。(A)类A一定是类C的友元(B)类C一定是类A的友元(C)类C的成员函数可以访问类B的对象的任何成员(D)类A的成员函数可以访问类B的对象的任何成员4.下述关于类的静态成员的特性中,描述错误的是()。(A)说明静态数据成员时前边要加修饰符static(B)静态数据成员要在类体外定义(C)引用静态数据成员时,要在静态数据成员前加类名和作用域运算符(D)每个对象有自己的静态数据成员副本5.若有以下说明,则对n的正确访问语句是()。classY{//…;public:staticintn;};intY::n;YobjY;(A)n=1;(B)Y::n=1;(C)objY::n=1;(D)Y-n6.若有以下类Z说明,则函数fStatic中访问数据a错误的是()。classZ{staticinta;public:staticvoidfStatic(Z&);};intZ::a=0;ZobjZ;(A)voidZ::fStatic(){objZ.a=1;}(B)voidZ::fStatic(){a=1;}(C)voidZ::fStatic(){this-a=0;}(D)voidZ::fStatic(){Z::a=0;}7.若有以下类W说明,则函数fConst的正确定义是()。classW{inta;public:voidfConst(int&)const;};(A)voidW::fConst(int&k)const{k=a;}(B)voidW::fConst(int&k)const{k=a++;}(C)voidW::fConst(int&k)const{cina;}(D)voidW::fConst(int&k)const{a=k;}8.若有以下类T说明,则函数fFriend的错误定义是()。classT{inti;friendvoidfFriend(T&,int);};(A)voidfFriend(T&objT,intk){objT.i=k;}(B)voidfFriend(T&objT,intk){k=objT.i;}(C)voidT::fFriend(T&objT,intk){k+=objT.i;}(D)voidfFriend(T&objT,intk){objT.i+=k;}【解答】CDDDBCAC综合练习一、思考题1.结构与类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材中的一个例程试试看,想一想做什么修改能使程序正确运行?【解答】结构是数据的封装,类是数据和操作的封装。可以把结构看成是类的特例。结构和类都可以用关键字struct或class定义。区别是,struct定义的结构或类的全部成员都是公有的,用class定义的结构或类不做声明的成员是私有的。若把struct改成class,只需要把全部成员定义为public就可以了。2.有说明:classA{inta;doublex;public:funMember();};Aa1,a2,a3;编译器为对象a1、a2和a3开辟了什么内存空间?它们有各自的funMember函数的副本吗?C++通过什么机制调用类的成员函数?【解答】开辟的存储空间有a1.a,a1.x,a2.a,a2.x,a3.a,a3.x。各对象没有funMember函数的副本,C++通过this指针调用成员函数。3.C++提供了系统版本的构造函数,为什么还需要用户自定义构造函数?编写一个验证程序,说明自定义构造函数的必要性。【解答】类的默认构造函数可以建立基本类型数据成员的存储空间。基于以下两个原因,需要用户定义构造函数:(1)对数据成员的值做指定初始化;(2)类的数据是由指针管理的堆。4.试从定义方式、访问方式、存储性质和作用域4个方面来分析类的一般数据成员和静态数据成员的区别,并编写一个简单程序验证它。【解答】定义方式访问方式存储性质作用域一般数据成员类中定义对象.数据成员局部数据由访问属性public,protected,private决定静态数据成员类中声明,类外定义对象.数据成员类::数据成员全局数据5.试从定义方式、调用方式两个方面来分析常成员函数、静态成员函数和友元函数的区别。【解答】定义方式调用方式常成员函数函数原型以const做后缀this指针被约束为指向常量的常指针与一般成员函数调用形式相同对数据成员只读静态成员函数以static做函数原型前缀通过类或对象调用没有this指针用于操作静态数据成员友员函数以friend做函数原型前缀没有this指针通过参数访问对象可以访问对象的不同属性的成员2.定义一个BOX(盒子)类,在该类定义中包括以下数据成员和成员函数。数据成员:length(长)、width(宽)和height(高)。成员函数:构造函数BOX,设置盒子的长、宽和高三个初始数据;成员函数volume计算盒子的体积。在main函数中,要求创建BOX对象,输入长、宽、高,例如box1(1,3,5)和box2(2,4,6),输出盒子的体积。【解答】#includeiostreamusingnamespacestd;classBOX{public:BOX(doublel,doublew,doubleh){length=l;width=w;height=h;}voidvolume(){coutvolume=length*width*heightendl;}private:doublelength,width,height;};intmain(){BOXbox1(1,3,5);box1.volume();BOXbox2(2,4,6);box2.volume();}
本文标题:C++给学生习题第6章练习题
链接地址:https://www.777doc.com/doc-4628432 .html