计算机程序设计(C++)单元测试题3及答案.docx
-
资源ID:1050490
资源大小:30.55KB
全文页数:15页
- 资源格式: DOCX
下载积分:5金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
计算机程序设计(C++)单元测试题3及答案.docx
一、单选题1、下列有关类的说法,不正确的是()。A.只有类中的成员函数或类的友元函数才能存取类中的私有数据B.类是一种用户自定义的数据类型C.在类中,如果不作特别说明,所有的数据成员均为私有数据成员D.在类中,如果不作特别说明,所有的成员均为公有成员正确答案:D解析:C+规范规定,类中所有的成员默认为私有成员,除非显示地约定。2、有如下两个类的定义:classAl;classBBAlvl,*v2;BBv3;BB*v4;;其中有一个成员变量的定义是错误的,这个变量是()oA.v2B.vlC.v4D.v3正确答案:D解析:在类BB中不能声明BB类型的对象作为成员变量,C+不支持嵌套定义对象本身,但是定义自身的指针是可以的。3、有关类和结构体的关系,错误的是()。A.类的成员默认都是私有的B.结构体的成员默认都是公开的C.结构体一般只有数据成员,通常不会加入函数方法D.类一般只有函数方法,通常不会包含数据成员正确答案:D4、按照常理,下列哪个概念可以理解为对象而不是类?()A.国际知名学府B.985工程大学C.诺贝尔奖获得者D.西安交通大学正确答案:D5、设有以下类和对象的定义:classA(public:intk;;A×l,x2z*plz*p2;则下面针对成员变量k的引用,正确的是()oA.xl->k=l;B.pl.k=3;C.×2.k=2;D.(*p2)->k=4;正确答案:C解析:Xl,x2是对象,只能用XLk这样的引用形式;pl,p2是指针,只能用pl->k或者(*pl).k这样的引用形式。6、下面有关类与对象的说法中,错误的是()0A.对象是类的实例B.一个对象不能同时属于多个没有关系的独立的类C.类和对象的关系与数据类型和变量的关系相似D.一个类只能有一个对象正确答案:D解析:类是一种定义,对象是该定义的实例。一个类当然可以有很多个对象。7、请阅读如下程序,给出输出结果:#include<iostream>#include<string>usingnamespacestd;classXCFinta;public:XCF(intaa=O):a(aa)cout<<"l"XCF(XCF&x)(a=x.a;cout<<,2")XCF()cout<<a;intGeta()returna;;voidmain()(XCFdl(5)zd2(dl);XCF*pd=newXCF(8);cout<<pd->Geta();deletepd;运行时的输出结果是()oA.1218855B.128512C.12185D.1215588正确答案:A解析:考查的是对象的构造和析构顺序。dl先构造,下来d2构造、d3构造。析构时d3显式地使用delete析构了,接着按照构造的反顺序d2析构,dl析构。8、下列关于构造函数说法不正确的是()。A.在构造函数中可以对类中的成员进行初始化B.构造函数必须与类同名C.构造函数必须有返回值D.构造函数可以省略不写正确答案:C9、下列哪些情况下不会调用对象的析构函数?()A.当对象变量脱离其作用域时B.函数中定义的动态对象变量当函数执行结束时C.用delete删除对象指针时D.将对象指针强行赋值为NULL时正确答案:D10、构造函数的函数名要求是()。A.必须是constructB.和类同名C.其中的字母必须是大写D.可以任意取名,只要符合标识符规范正确答案:B11、构造函数的返回类型是()oAJntB.不写返回类型CxharD.char*正确答案:B12、为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。A.privateB.publicC.protectedD.static正确答案:B解析:类成员为PriVate和ProteCted权限的,只能在该类的成员函数或其派生类的成员函数中访问。访问StatiC成员需要用类似A:func()的形式访问。13、由于以下哪个原因,在编程实践中很少使用私有继承。()A.私有继承的性能低于公有继承B.私有继承不能很好的保护基类成员的安全性C.私有继承对基类的编写方法有更为严格的要求D.经过私有继承之后,基类的成员再也无法在以后的派生类中直接发挥作用正确答案:D解析:基类的公有和保护成员到了派生类之中全部成为私有成员,基类的成员再也无法在以后的派生类中直接发挥作用,实际上是终止了基类功能的继续派生,出于这种原因,一般情况下很少使用私有继承。14、下列程序的输出结果是()oinclude<iostream>usingnamespacestd;classBase(public:voidprint()cout«'B';classDerived:publicBase(public:voidprint()cout«'D';intmain()(Derived*pd=newDerived();Base*pb=pd;pb->print();pd->print();deletepd;returnO;)A.DDB.BDC.DBD.BB正确答案:B解析:对于没有特别声明过的一般函数来说,指针是什么类型的,就调用哪个类型的函数。想要实现按照指针指向对象的类型动态改变需要执行的函数,请同学们参考下一章讲述多态性的内容。15、当派生类从基类公有继承时,以下哪种说法是错误的()oA.可以把派生类对象的地址赋给基类对象的指针B.可以用派生类对象为基类对象赋值C.可以用基类对象为派生类对象赋值D.可以把指向派生类对象的指针赋给基类对象的指针正确答案:C解析:派生类对象包括基类对象的所有成员,也包括自己特有的成员,因此可以给基类对象赋值,反之则不行。16、下列对派生类的描述中,错误的是()oA.派生类至少有一个基类。B.派生类成员除了它自己的成员外,还包含它的基类成员。C,一个派生类可以作为另一个派生类的基类。D.派生类中继承的基类成员的访问权限到派生类保持不变。正确答案:D解析:派生类中继承的基类成员在派生类中的访问权限如何,要根据继承的类型决定,一般都要有所变化。17、在面向对象程序设计中,实现信息隐蔽是靠()oA.对象的分类B.对象的继承C.对象的封装D.对象的间接访问正确答案:C解析:对象的封装性,即从外面只能看到对象的外部特征,而对象的内部状态对外是不可见的。因此对象的信息隐蔽是依靠对象的封装来实现的。18、关于基类中的虚函数与一般成员函数,正确的是()。A.虚函数与一般成员函数在基类中没什么区别B.虚函数不能定义函数体,而一般成员函数可以C.虚函数只能定义一个,而一般成员函数可以多个D.虚函数不能被调用,而一般成员函数可以正确答案:A解析:A、虚函数主要用于派生类对基类同名函数的覆盖。19、虚函数不得声明为()函数。A.构造B.友元C.静态D.其他三项均正确正确答案:D20、如果一个类至少有一个(),那么就称该类为抽象类。A.成员函数B.纯虚函数C.构造函数D.友元函数正确答案:B21、只有使用虚函数机制,才能()。A.使用基类指针调用派生类的成员函数B.使用派生类指针调用基类的成员函数C.使基类指针指向派生类对象D.使派生类指针指向基类对象正确答案:A22、基类中的虚函数如果在派生类中未重新定义,则会出现()的情况。A.无法使用基类的对象调用这个函数B.无法使用派生类的对象调用这个函数C.不允许定义派生类的对象D.使用派生类的对象调用的仍然是基类的这个函数正确答案:D解析:C+语言中,派生类如果未定义成员函数,则继承基类的同名成员函数,与是不是虚函数无关。23、基类中允许定义()个虚函数?A.一个B.两个C.任意多个D.和成员变量的个数有关正确答案:C解析:C、C+语言中类的虚函数的个数不受限制。二、判断题1、设计类时应该尽量设计完备,将所有能想到的属性方法全部写入声明。正确答案:X解析:设计类应该简约,只需要录入应用程序需要的属性方法。2、以下类的声明是完全正确的。classmobileprivate:char mynumberll;机主的电话号码public:voidinit(charnumberll=OoOOOOoOO0)隐式定义的内联函数voiddial();拨打电话的函数声明voidanswer(charothernumberll);接听电话的函数声明voidhangup();挂断电话的函数声明)正确答案:X解析:类声明最后一个大括号处必须要有一个分号!这是类初学者最常出现的错误,没有之一。关键编译器对这个错误的提示很奇怪,很难让初学者明白错误的准确位置。3、语法上,一个类不能将自身的所有成员定义为私有的。正确答案:X解析:C+允许这样做,但是这样的类由于没有对外的接口,外界是不能使用的。4、类的成员函数都必须设成公有的,以便外界调用。正确答案:X解析:如果只是类内部使用的函数就可以设为私有的。5、使用对象指针来动态生成对象时不会调用构造函数。正确答案:×6、一个类的构造函数和析构函数都可以有多种形式。正确答案:X解析:一个类的构造函数可以有多种形式,析构函数只能有一种形式。7、构造函数可以是内联函数。正确答案:8、如果没有显式定义构造函数(包括拷贝构造函数),C+编译器就隐式定义一个默认的构造函数。正确答案:解析:每个类必须有拷贝和构造函数。没有定义的话编译器就会自动生成一个。9、this指针存储的是当前被调用的成员函数所在的对象的地址。正确答案:10、在公有继承的情况下,基类中的private成员在派生类中仍是private的。正确答案:X解析:对于基类的私有成员,派生类无法继承。11、在派生类中,可以直接继承基类的构造函数和析构函数。正确答案:X解析:基类的构造函数和析构函数不能被继承,在派生类中,如果对派生类新增的成员初始化,就必须为派生类添加新的构造函数,派生类的构造函数只负责对派生类新增的成员初始化,对所有从基类继承下来的成员,其初始化工作仍然由基类的构造函数完成。同样,对派生类对象的扫尾、清理工作也需要加入新的析构函数。12、派生类中成员函数的名称不能和基类的成员函数名称重复。正确答案:X解析:是可以的。在派生类中定义一个和基类成员变量或者成员函数同名的成员(如果是成员函数,则参数表也要相同,参数不同的情况属于重载),这样在派生类中或者通过派生类的对象直接使用的成员名只能是派生类中定义的同名成员,这种方法就被称作同名覆盖。13、当在多条继承路径上有一个公共的基类时,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例,此时可以用虚基类来解决这个问题。正确答案:解析:如果只想保存基类成员的一个实例,就可以将公共基类定义为虚基类。通过把基类继承声明为VirtUaI,就可以只继承基类的一份拷贝,从而消除歧义。14、基类中的运算符重载函数不能定义为纯虚函数。正确答案:X解析:C+中的成员函数都可以定义为虚函数甚至纯虚函数,而与是不是运算符重载函数无关。15、函数重载也是C+中多态性的一个体现。正确答案:解析:函数重载属于静态多态或者编译时多态。16、基类中的纯虚函数在派生类中必须重新定义。正确答案:X解析:如果派生类不用于定义对象,也可以先不定义这个函数,而是在派生类的派生类中重新定义。17、抽象基类可以通过指针和new运算符实例化对象。正确答案:X解析:由于抽象基类中的纯虚函数无函数体的原因,必须由派生类实现了函数代码以后才可以定义派生类的对象。