c++笔试题含(答案)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计一、选择题(1)C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是()A)面向过程B)面向对象C)安全性D)复用性(2)C++语言的跳转语句中,对于break和continue说法正确的是()A)break语句只应用与循环体中B)continue语句只应用与循环体中C)break是无条件跳转语句,continue不是D)break和continue的跳转范围不够明确,容易产生问题(3)for(intx=0,y=o;!x&&y=5;y++)语句执行循环的次数是()A)0B)5C)6D)无次数(4)考虑函数原型voidtest(inta,intb=7,char=*),下面的函数调用中,属于不合法调用的是()A)test(5);B)test(5,8);C)test(6,#)D)test(0,0.*);(5)下面有关重载函数的说法中正确的是()A)重载函数必须具有不同的返回值类型;B)重载函数形参个数必须不同;C)重载函数必须有不同的形参列表D)重载函数名可以不同;(6)下列关于构造函数的描述中,错误的是()A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行C)构造函数可以是内联函数;D)构造函数不可以重载(7)下面描述中,表达错误的是()A)公有继承时基类中的public成员在派生类中仍是public的B)公有继承是基类中的private成员在派生类中仍是private的C)公有继承时基类中的protected成员在派生类中仍是protected的D)私有继承时基类中的public成员在派生类中是private的(8)应在下列程序划线处填入的正确语句是()#includeclassBase{public:voidfun(){coutBase::funENDL;}};classDerived:publicBase{voidfun(){_____________//显示调用基类的函数fun()coutDerived::funENDL;}};A)fun();B)Base.fun();C)Base::fun();D)Base-fun();(9)有如下程序:#includeclassBASE{charc;public:BASE(charn):c(n){}virtual~BASE(){coutC;}};classDERIVED:publicBASE{charc;public:DERIVED(charn):BASE(n+1),c(n){}~DERIVED(){coutC;}};intmain(){DERIVED(X);return0;}执行上面的程序将输出()A)XYB)YXC)XD)Y二、填空题(1)下面程序的打印结果是[1]#incudeintf(int);intmain(){inti;for(i=0;i5;i++)coutF(I);return0;}intf(inti){staticintk=1;for(;i0;i--)k+=i;returnk;}1251121(2)在用class定义一个类时,数据成员和成员函数的默认访问权限是[2]private或私有(3)含有纯虚函数的类称为[3]抽象类(4)已知intDBL(intn){returnn+n;}和longDBL(longn){returnn+n;}是一个函数模板的两个实例,则该函数模板的定义是[4]templateTDBL(Tn){returnn+n;}选择题对于全局函数intf(void),与其完全等价的函数原型为:A.int&f();B.intf(void)const;C.constintf();D.A、B、C都不是2.类A中有唯一的非静态成员函数intf(A&one)和私有的数据成员intx;,那么在此成员函数的函数体中可以有语句:A.returnone.f(this);B.x=f(this);C.this-f(x.one);D.int*constpX=&one.x;3.下面关于new和delete操作符的说法,哪个是不正确的:A.使用new操作符,可以动态分配全局堆中的内存资源。B.若p的类型已由A*强制转换为void*,那么执行语句deletep;时,类A的析构函数不会被调用。C.实现全局函数时,new和delete通常成对地出现在由一对匹配的花括号限定的语句块中。D.执行语句A*p=newA[100];时,类A的构造函数只会被调用1次。4.类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员一定是不允许的:A.TM*a;B.TN&a;C.TMa;D.TNa;5.类B是通过public继承方式从类A派生而来的,且类A和类B都有完整的实现代码,那么下列说法正确的是:A.类B中具有pubic可访问性的成员函数个数一定不少于类A中public成员函数的个数。B.一个类B的实例对象占用的内存空间一定不少于一个类A的实例对象占用的内存空间。C.只要类B中的构造函数都是public的,在main函数中就可以创建类B的实例对象。D.类A和类B中的同名虚函数的返回值类型必须完全一致。6.下列哪种函数可以是虚的:A.自定义的构造函数B.拷贝构造函数C.静态成员函数D.析构函数7.类A有一个实例化的常量对象a,那么下面的说法中不正确的是:A.类A中的非静态数据成员一定都是常量成员。B.通过a可以直接调用类A的常量成员函数。C.a不能直接作为左值表达式使用。D.a可以是静态常量对象。8.在不考虑强制类型转换的情况下,关于类中常量成员函数的下列说法不正确的是:A.常量成员函数中不能修改本类中的非静态数据成员。B.常量成员函数中可以调用本类中的任何静态成员函数。C.常量成员函数的返回值只能是void或常量。D.若常量成员函数中调用虚函数f,那么函数f在本类中也一定是一个常量成员函数。9.类C是以多重继承的方式从类A和类B继承而来的,类A和类B无公共的基类,那么:A.类C的继承方式只能采用public继承。B.可改用单继承的方式实现类C的同样功能。C.类A和类B至少有一个是抽象类。D.类A和类B至少有一个是虚基类。10.下列哪种用法不能体现类A和类B之间的组合关系:A.类A中声明数据成员Bb;B.类A中声明数据成员B*b;C.类A中声明数据成员constB&b;D.类A中声明成员函数Bfunc(B&obj);二、(共10分,每题2分,多选、少选、错选都不得分)多项选择1.下面关于指针变量和引用变量的说法正确的是:A.指针变量存放的是内存地址,并且可以置为0。B.定义引用变量时,必须同时指明具体被引用的对象或变量。C.使用取地址操作符,可以取得指针变量自身的地址,但取不到引用变量自身的地址。D.类中的数据成员可以是指针变量,但不能是引用变量。2.类A中有唯一的一个公有成员函数f,对于类A的一个对象a,执行语句a.f(100);成功,那么f的函数原型可以为:A.A&f(int,int=50);B.voidf(int&)const;C.constA*f(constint);D.Af(constint&)const;3.关于类中重载赋值运算符的正确说法是:A.由编译器提供的缺省赋值函数具有public访问性并且执行按位赋值。B.在重载派生类的赋值操作时,不但要实现派生类中数据成员的赋值,还要负责基类中数据成员的赋值。C.只有在类中含有指针数据成员或引用数据成员时,才需要重载类的赋值操作。D.通过修改类A的声明或定义,可以禁止用户在类A对象间进行任何赋值操作。4.在类的静态成员函数的实现体中,可以访问或调用:A.本类中的静态数据成员B.本类中非静态的常量数据成员C.本类中其它的静态成员函数D.本类中非静态的成员函数5.关于异常和C++提供的异常处理机制正确的说法是:A.若程序员预见到程序中的异常,则一定可以通过修改程序代码来避免异常出现。B.使用dynamic_cast操作符可能会产生异常。C.异常可以用catch进行捕获处理。D.异常可以是对象,也可以是普通整数。三、(共20分,每题2分)判断正误,对于你认为错误的论述,说明原因或举出反例。1.函数体内声明的静态变量,至多只会被初始化一次。对2.对于同一个类中的两个非静态成员函数,它们的函数的名称、参数类型、参数个数、参数顺序以及返回值的类型不能完全相同。错如可有两个成员函数,intf();和intf()const;3.inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度。错是否真正内联,由编译器决定。如函数是递归函数,那么永远不会内联。4.每个cpp文件是单独编译的,但一个程序中多个cpp文件的编译顺序是不固定的。对5.将类A所有构造函数的可访问性都限制为私有的,那么在main函数中不可能得到类A的实例对象。错可通过类的静态成员函数创建实例。6.名字空间是可以多层嵌套的;对于类A中的函数成员和数据成员,它们都属于类名A代表的一层名字空间。对7.若在类Base和派生类Derived中,分别声明一个同名的整型成员变量intx;,那么通过Derived类的实例对象,不可能输出基类Base中的变量x的值。.错如可通过继承自基类的成员函数访问基类中的x8.若类A是类B的友员类,且类B是类C的友员类,那么类A也是类C的友员类。错友员关系不具有传递性。9.虽然抽象类的析构函数可以是纯虚函数,但要实例化其派生类对象,仍必须提供抽象基类中析构函数的函数体。对10.构造函数的初始化列表中的内容,不会影响构造对象中成员数据的初始化顺序。对六、(共20分)回答下列各题1.说明类中的public、protected和private成员函数分别在public、protected和private继承方式下在派生类中的可访问性。(4分)重点是基类中的任何Private在派生类中都是不可访问的。2.若类A和类B没有继承关系,对于函数voidfunc(A&),请至少用两种不同方法说明如何才能传递一个非常量的B类对象给func函数。(4分)可在A类中定义一个构造函数:A(constB&);或在B类中定义一个自动转换函数:operatorA()const;4.举例说明重载(overload)、重定义(redefine)和重写(override)的含义。(3分)如类A中有函数intf(void);和intf(int);为重载(overload)(同名,参数不同)如类A中有函数intf(void);,A的派生类B中给intf(void)一个新的实现体,为redefine如类A中有虚函数virtualintf(void);,A的派生类B中给virtualintf(void)一个新的实现体,为override.5.通常类A的拷贝构造函数的原型写为A(constA&);,请问为什么参数一定要使用引用形式?使用const修饰符除了可以防止修改传递给构造函数的实参外,还有什么作用?(3分)A(constA&one).当调用此拷贝构造函数时,需将参数压栈,若不使用&,就需要在栈内创建一个one的副本,而这需要用拷贝构造函数。这样就会形成递归调用。使用const,还允许用一个常量对象作为样本,来构造一个新的对象。6.程序员规范中要求不要写出类似(++i)+(i++)或f(++i,i++)这样的代码,请说明原因。(3分)计算子表达式的顺序由编译器决定的,虽然参数的压栈顺序在给定的调用方式下式固定的,但参数表达式的计算顺序也由编译器决定的。不同的编译器或不同的表达式计算的顺序可能不一致。七、(共8分)阅读下面部分程序代码,完成3个问题。#includeiostream.hclassA{public:A(intv1)(v1){}virtualintGetData()const{returnx;}private:intx;};classB:publicA{public:B(intv1,intv2):A(v1),y(v2){}virtualint

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功