您好,欢迎访问三七文档
1C++测试试题一、选择体(共50分每小题2分)1、下列语句中错误的是(D)A、int*p=newint(10)B、int*p=newint[10]C、int*p=newintD、int*p=newint[40](0)解题思路:表示动态分配1个整型内存空间,初始值为10表示动态分配10个整型内存空间;表示动态分配1个整形内存空间想给以个数组分配内存空间时,对数组进行初始化,这是不允许的2、假设已经有定义“constchar*constname=chen;下面的语句中正确的是(D)A.name[3]='a'B.name=linC.name=newchar[5]D.coutname[3]解题思路:Name被定义为指向常量的常指针,所以它所指的内容和本身的内容都不能修改,而“name【3】=‘a’;修改了name所指的常量,“name=“lin”;”和“name=newchar【5】;”修改了常指针,只有D输出一个字符是正确的。3、假设已经有定义“char*constname=chen;下面的语句中正确的是(A)A.name[3]='q'B.name=linC.name=newchar[5]D.name=newchar('q')解题思路:Name被定义常指针,所以它所指的内容能改变,但指针本身的内容不可以修改,“name【3】=‘q';修改了name所指向的内容,是正确的。而“name=“lin”、name=newchar【5】和name=newchar(’q‘);以不同的方法修改了常指针,都市错误的。4、假设已经有定义“constchar*name=chen;”下面的语句中错误的是(A)A.name[3]='q'B.name=linC.name=newchar[5]D.name=newchar('q')解题思路:Name被定义指向常量的指针,所以它所指向的内容不能改变,但指针本身的内容可以修改,而“name[3]='q'”,修改了name所指向的内容,是错误的。其余三个只是修改了指针指向的方向;5、重载函数在调用时选择的依据中,(B)是错误的。A、函数名字B、函数的返回值C、参数的个数D、参数的类型6、在(A)情况下适宜采用内联函数。A、函数代码小,频繁调用B、函数代码多,频繁调用C、函数体含有递归语句D、函数体含有循环语句27、下面的类型声明中正确的是(D)A、int&a[4]B、int&*pC、int&&qD、inti,*p=&i解题思路:C++中不能建立引用数组和指向引用的指针,也不能建立引用的引用,所以A、B、C、是错误的8、下面关于重载函数的说法中正确的是(C)A、重载函数必须具有不同的返回值类型B、重载函数形参个数必须不同C、重载函数必须有不同的形参列表D、重载函数名可以不同解题思路:重载函数的名必须相同、重载函数必须有不同的形参列表9、关于new运算符的下列描述中,(D)是错误的A、它可以用来动态创建对象和对象数组B、使用它创建的对象或对象数组可以使用运算符delete删除C、使用它创建对象时要调用构造函数D、使用它创建对象数组时必须指定初始值10、下面有关构造函数的描述中,正确的是(B)A、构造函数可以带有返回值B、构造函数的名字与类名完全相同C、构造函数必须带有参数D、构造函数必须定义,不能默认解题思路:C++中对构造函数有一些规定:不能带返回值;可以不带参数;也可以缺省定义;构造函数的名字与类名必须完全相同。11、在类的声明时,下面说法正确的是(C)A、可以在类的声明中给数据成员赋初值B、数据成员的数据类型可以是registerC、private、public、protected可以按任意顺序出现D、没有用Private、public、protected定义的数据成员是共有成员解题思路:C++中没有限定private,public、protected的书写次序。但是,不能再类的声明中给数据成员赋初值,数据成员的数据类型也不能为register(向寄存器申请空间的关键字),没有用private、public、protected定义的数据成员是私有成员和结构体相反12、在下面有关析构函数特征的描述中,正确的是(C)A、一个类中可以定义多个析构函数B、析构函数名与类名完全相同C、析构函数不能指定返回类型D、析构函数可以有一个或多个参数13、构造函数是在(B)时被执行的A、程序编译B、创建对象C、创建类D、程序装入内存14、在下面有关友元函数的描述中,正确的是说法是(A)A、友元函数是独立于当前类的外部函数B、一个友元函数不能同时定义为两个类的友元函数C、友元函数必须在类的外部定义D、在外部定义友元函数时,必须加关键字friend解题思路:3在C++中友元函数是独立于当前类的外部函数,一个友元函数可以同时定义为两个类的友元函数,友元函数即可以在类的内部,也可以在类的外部定义;在类的外面定义友元函数时不必加关键字friend。15、友元的作用之一是(A)A、提高程序的运行效率B、加强类的封装性C、实现数据的隐藏性D、增加成员函数的种类解题思路:由于友元函数可以直接访问对象的私有成员,所以友元的作用是提高程序的运行效率。16、能用友元函数重载的运算符是(A)A、+B、=C、[]D、-解题思路:C++规定不能用友元函数重载“=”、“[]”和“-”。17、关于虚函数,正确的描述是(A)A、构造函数不能是虚函数B、析构函数不能是虚函数C、虚函数可以是友元函数D、虚函数可以是静态成员函数解题思路:C++中规定构造函数不能是虚函数,而析构函数可以是虚函数。18、如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是(C)A、virtualshow()=0B、virtualvoidshow()C、virtualvoidshow()=0D、voidshow()=0virtual解题思路:Virtualshow()=0;表示是纯虚函数,但没指定不带返回值,所以是错误的;Virtualvoidshow();未表明show是纯虚函数,所以也是错误的;Voidshow()=0virtual的位置写错了,正确的答案是C19、假设声明了以下的函数模板templateclassTTmax(Tx,Ty){return(xy)?X:y;}并定义了inti;charc;错误的调用语句是(D)A、max(i,i);B、max(c,c)C、max((int)c,i)D、max(i,c)20、使用派生类的主要原因是(A)A、提高代码的可重用性B、提高程序的运行效率C、加强类的封装性D、实现数据的隐藏21、假设已经定义好一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是(C)A、classderived::studentprivate{........}B、classderived::studentpublic{.......}C、classderived::privatestudent{.......}D、classderived::publicstudent{.........}22、下列关于纯虚函数与抽象类的描述中,错误的是(C)4A、纯虚函数是一种特殊的函数,它允许没有具体的实现B、抽象类是指具有纯虚函数的类C、一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类D、抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出23、C++处理异常的机制是由(B)三部分组成。A、编辑、编译和运行B、检查、抛出和捕获C、编辑、编译和捕获D、检查、抛出和运行24、下列描述中不正确的是(C)。A、字符型数组中可以存放字符串B、可以对字符型数组进行整体输入、输出C、可以对实型数组进行整体输入、输出D、不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值25、在类的定义中,用于为对象分配内存空间对类的数据成员进行初始化并执行其他内部管理操作的函数是(D)A、友元函数B、虚函数C、内联函数D、构造函数二、填空题(共10分每小题1分)26、请写出BOOLflag与“零值”比较的标准if语句___if(flag)、if(!flag)___27、假设在程序中已经声明了类Point,并建立了其对象p1和p4。请写出以下几个语句的区别Pointp1,p3定义了point类的两个对象p2和p3;Pointp2=p1建立新对象p2时,用已经存在的对象p1去初始化新对象p2在这个过程中调用了“赋值法”调用了拷贝构造函数Pointp2(p1)建立对象p2时,用p1去初始化,在这个过程中用“代入法”调用了拷贝构造函数p4=p1将对象p1数据成员的值拷贝到对象p4中,这个过程是通过默认赋值运算符函数实现的28、C++为成员函数提供了一个名字为____this__的指针,这个指针称为自引指针。29、纯虚函数的声明格式:virtual函数返回类型说明符函数名(参数表)=0;30、面向对象的几个基本特征是________封装、继承、多态_____________31、析构函数为什么不能被重载_______因为析构函数是不带参数的_________三、有关内存的思考题(共20分每小题5分)33、voidGetMemory(char*p){P=(char*)malloc(100);}Voidtest(void){Char*str=NULL;GetMemory(str);Strcpy(str,“hello”);Printf(str);}5请问运行test函数会有什么样的结果?程序崩溃:因为GetMemory并不能传递动态内存,Test函数中的STR一直是空Strcpy(str,“hello”);将使程序崩溃34、char*GetMemory(void){charp[]=“hello”;returnp;}voidTest(void){char*str=NULL;Str=GetMemory();Printf(str);}请问运行test函数会有什么样的结果?运行结果有可能是乱码;因为getmemory函数返回的是栈内存指针该内存指针地址不是NULL,但其原先的内容已经被清空,他的新内容是不可预知的35、voidGetMemory(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(&stl,100);Strcpy(str,“hello”);printf(str);}请问运行test函数会有什么样的结果?1、能输出hello;2、内存泄露36、voidTest(void){char*str=(char*)malloc(100);Strcpy(str,“hello”);free(str);If(str!=NULL){Strcpy(str,“world”);Printf(str);}}请问运行test函数会有什么样的结果?篡改动态内存区域的内容,后果难以预料,非常危险6因为free(str);之后str成为野指针,if(str!=NULL)语句不起作用四、写出程序运行答案(10分)#includeiostreamusingnamespacestd;classbase1{public:base1(){coutclassbase1endl;}};classbase2{public:base2(){coutclassbase2endl;}};classlevel1:publicbase2,virtualpublicbase1{public:level1(){coutlevel1endl;}};classlevel2:publicbase2,virtualpublicbase1{public:level2(){coutlevel2endl;}};classtoplevel:publiclevel1,virtualpubliclevel2{public:tople
本文标题:C++考试题解答
链接地址:https://www.777doc.com/doc-4560022 .html