C++测试题一、填空题(30空*1分)1.在C++中,函数的参数有两种传递方式,它们是值传递和________。2.当一个成员函数被调用时,该成员函数的__this对象指针_____指向调用它的对象。3.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有____________,对此数据成员的访问将出现歧义。4.拷贝构造函数使用___引用_____作为参数初始化创建中的对象。5.在公有继承的情况下,基类数据成员在派生类中的访问权限_不变_________。6.建立一个有成员对象的多态派生类对象时,各构造函数体的执行顺序为_先基类按继承顺序,再成员对象按声明顺序,最后派生类本身_________________7.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到_____默认___________构造函数,否则应用程序会产生一个编译错误。8.静态数据成员在类外进行初始化,且静态数据成员被类的所有对象__共享______。9.为了避免可能出现的歧义,C++对if…else语句配对规则规定为:else总是___与之前最近的if_____________配对。10.设inta=3,b=4,c=5;,表达式(a+b)c&&b==c的值是_0___。11.面向对象的程序设计有四大特征,它们是抽象、封装、_继承_____、_多态_______。12.定义重载函数时,应至少使重载函数的参数个数或参数类型__不同_____;在基类和派生类中,成员函数的覆盖是指__________________________________________________。13.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、但析构函数没有__重载___________,但可以定义为_____虚函数____________14.动态联编要满足两个条件,它们是____多态_________________,____赋值兼容原则______________。15.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为_抽象类________,定义该类至少具有一个___纯虚函数__________。16.在C++类中,const关键字可以修饰对象和函数,const可以保护对象不被____修改__________,const函数不能_____________。17.任意一个类,构造函数的个数最多是__无限_______,析构函数的个数最多是____1______18.C语言中没有字符串类型,字符串是通过字符数组来表示的,每一个字符串都有一个结尾字符_\0____,C++中字符串类型是__string_____19.C++中没有输入输出语句,输入输出是通过___________实现的,写出一条打印整型变量n的输出语句:__coutn;_________20.C++中比C语言更高级的两种代码复用的方式:_继承_________,__模板________。二,单项选择题(12题*1.5分)1.已定义了一个类A并有语句A*pa=newA(5);那么以下说法正确的是:A.该语句会创建A类的一个对象,并将此对象的地址赋给指针pa;B.该语句会创建A类的5个对象,且它们的地址是连续的;C.当指针变量pa超出其作用域时,pa和为对象分配的空间都将被自动释放;D.类A中一定有一个显式定义的构造函数和一个显式定义的虚析构函数;2.定义类A的非静态成员函数A&f(A&one)时,需有语句returnexp;则exp不能是:A.类A中类型为A的静态数据成员B.f中用语句Aa=one;定义的量aC.oneD.*this3.在一个类中,下列哪些成员可以是多个?A.无参构造函数B.虚析构函数C.原型相同的非静态成员函数D.静态成员函数4.对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是:A.公有或私有B.私有C.保护或私有D.公有或保护5.在下列关键字中,不能用来表示继承方式的是:A.privateB.staticC.publicD.protected6.下列有关运算符重载的叙述中,正确的是:A.运算符重载是多态的一种表现B.C++中可以通过运算符重载创造新的运算符C.C++中所有运算符都可以作为非成员函数重载D.重载运算符时可以改变其结合性7.下列关于类定义的说法中,正确的是:A.类定义中包括数据成员与函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义8.建立一个有成员对象的派生类对象时,各构造函数体的执行顺序为:A.派生类成员对象类基类B.成员对象类基类派生类C.基类成员对象类派生类D.基类派生类成员对象类9.C++中解决命名冲突的机制是:A.虚基类B.虚函数C.函数重载D.名字空间10.任意一个类,析构函数的个数最多是:A.不限个数B.1C.2D.311.在类定义中,为说明成员的访问权限,private,protected,public可以出现次数为:A.次数没有具体限定B.每种至多一次C.public至少一次D.每种至少一次12.下面关于访问类A的私有数据成员的说法,错误的是:A.类A的友元函数可以访问类A的私有成员。B.类A的友元类中的非静态成员函数可以访问类A的私有成员。C.类A的嵌套类中的非静态成员函数可以访问类A的私有成员。D.类A中的非静态成员函数可以访问类A的私有成员。三.代码阅读(7题*4分)1.下面程序的运行结果是。#includestdio.hvoidmain(){chara='a',b='j';floatx;x=(b-a)/('F'-'A');printf(%d/n,(int)(3.14*x));}2.下面程序的运行结果是________。#includeiostreamvoidmain(){Intj=0;For(unsignedcharI=0;I255;i++){J+=i&3;}Coutjendl;}3.下面程序的运行结果是________。#includeiostreamclasstest{private:intnum;floatfl;public:test();intgetint(){returnnum;}floatgetfloat(){returnfl;}~test();};test::test():num(1),fl=2.3{couttest()endl;num=0;fl=0.0;}test::~test(){cout~test()endl;}voidmain(){testarray[2];coutarray[1].getint()array[1].getfloat()endl;}4.下面程序的运行结果是________。#includeiostream.hclassA{public:A(){coutA::A()called./n;}virtual~A(){coutA::~A()called./n;}};classB:publicA{public:B(inti){coutB::B()called./n;buf=newchar[i];}virtual~B(){delete[]buf;coutB::~B()called./n;}private:char*buf;};voidfun(A*a){deletea;}voidmain(){A*a=newB(2);fun(a);}5.下面程序的运行结果是________。#includestdio.hinta[]={1,3,5,7,9};int*p[]={a,a+1,a+2,a+3,a+4};voidmain(){printf(%d/t%d/t%d/n,a[4],*(a+2),*p[1]);printf(%d/t%d/t%d/n,**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);}6.下面程序的运行结果是________。#includeiostream.hclassA{public:A(){cout1A::A()endl;}virtual~A(){cout2A::~A()endl;}virtualvoidg(){cout3A::g()endl;}voidh(){cout4A::h()endl;}virtualvoidf(){g();h();}};classB:publicA{public:B(){cout5B::B()endl;}virtual~B(){cout6B::~B()endl;}virtualvoidg(){cout7B::g()endl;}voidh(){cout8B::h()endl;}virtualvoidk(){f();g();h();}};voidmain(){Bb;b.k();}7.下面程序的运行结果是________。#includeiostream.hclassA{public:A(){cout1endl;}virtual~A(){cout2endl;}virtualintAdd(intn){return0;}};classB:publicA{public:B(intn):num(n){}virtual~B(){}virtualintAdd(intn){num+=n;returnnum;}private:intnum;};classC:publicA{public:C(A&obj,intn):a(obj),num(n){cout3endl;}virtual~C(){cout4endl;}virtualintAdd(intn){returna.Add(n+num);}private:A&a;intnum;};voidmain(){Bb(100);Cc1(b,1),c2(c1,2);coutc2.Add(50)endl;}四.问答题(5题*6分)1.若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?拷贝构造函数简单的制作了一个资源的拷贝,而不对本身分配,则两个对象用有同一个资源,当对象析构时,该资源将经历两次资源返还。2.简述成员函数、全局函数和友元函数的差别。成员函数只在本类有用,而全局函数对于其它都可用,类里的友元函数能访问该类成员。友元函数不是类成员,在类外定义。3.简述结构化的程序设计、面向对象的程序设计的基本思想。结构化程序设计:将该问题按功能分解,然后按必要的顺序实现,功能的划分并不严格,可按复杂程度分,对有些简单的功能不必划分出去。面向对象:将一个复杂的系统分解为一些合适实体(对象),由这些实体共同提供系统的功能。4.C++中的结构struct和类class有什么异同?内部实现与效率相同,但是默认情况下,struct的成员是公有的,而class成员是私有的5.简述vector,list,queue,stack,set,map,multimap的特点(优点/缺点)vector:从后面快速的插入与删除,直接访问任何元素,相当于数组,但其大小可以不预先指定,并且自动扩展。List:相当于数组,但其大小可以不预先指定,并且自动扩展。不能进行内部的随机即不支持[]操作符和vector.at()Queue:五.编程题(2题*12分)1.已知某程序中类MyString是自定义的一个用来描述字符串的类,它在main函数中使用情况如下:voidmain(){MyString*s1=newMyString(Hello);MyStrings2(World!);cout*s1s2endl;MyStrings3=*s1;Deletes1;c