您好,欢迎访问三七文档
C++考试试卷一、单项选择(每空1分,共20分)(注意选项填写到下面表格中!)1.已知:char*s=123456;则couts+2;的输出结果为()。A)123456B)3C)3456D)22.已知:char*s=abcde;则sizeof(s)、sizeof(*s)、strlen(s)的值依次为()。A)615B)415C)654D)4453.下列语句中正确的是()。A)char*s;*s=abcdefg;B)char*s;cins;C)char*s1=abcd,*s2=efghijk;strcpy(s1,s2);D)char*s=abcdefg;cout*s;4.C++中,关于构造函数和析构函数,正确的描述是()。A)在定义类时,必须自定义构造函数和析构函数,在创建对象时自动调用构造函数,在释放对象时自动调用析构函数B)构造函数和析构函数均可以重载C)已知类Student以及Student*p;在使用p=newStudent;时自动调用无参构造函数创建动态对象,在deleltep;时自动调用析构函数释放动态对象D)构造函数和析构函数都可以成为虚函数5.关于拷贝构造函数的描述正确的是()。得分12345678910cbdcb11121314151617181920A)通常的拷贝构造函数的参数是对象的指针类型B)如果不自定义拷贝构造函数,系统提供默认的拷贝构造函数C)如果有自定义的构造函数,系统就不再提供拷贝构造函数D)如果需要用已有对象为新创建的对象初始化时,就必须自定义拷贝构造函数6.有关静态成员的描述错误的是()。A)某个类的静态数据成员由该类的所有对象所共享B)类的公有静态数据成员既可以用类的对象访问,也可以直接用作用域运算符“::”通过类名来访问C)静态数据成员既可以是私有成员,也可以是公有成员D)类中一旦定义了静态数据成员,就必须定义静态成员函数,以便对静态数据成员进行操作7.一个类的友元函数或友元类能够通过成员访问运算符访问该类的()。A)所有成员B)私有成员C)保护成员D)公有成员8.下面关于继承方式的描述中错误的是()。A)公有继承时,基类的公有成员和保护成员在派生类中都成为公有成员B)私有继承时,基类的公有成员和保护成员在派生类中都成为私有成员C)保护继承时,基类的公有成员和保护成员在派生类中都成为保护成员D)无论哪种继承方式,基类中的私有成员在派生类中都无法直接访问9.类型兼容是指在基类对象可以出现的地方,都可以使用公有派生类的对象,已知:classBaseClass{//…};classDerivedClass:publicBaseClass{//…};BaseClassb,*pb;DerivedClassd,*pd;下面不属于类型兼容的是()。A)b=d;B)BaseClass&bb=d;C)pd=&b;D)pb=&d;10.在派生类中重新定义虚函数时,除了(),其他方面都必须与基类中相应的虚函数保持一致。A)参数个数B)参数类型C)函数名称D)函数体11.下列运算符中,必须使用成员函数进行重载的是()。A)==B)=C)D)++12.下列关于运算符重载的描述中,错误的是()。A)运算符重载不可以改变优先级B)运算符重载不可以改变结合性C)运算符重载不可以改变运算符的操作数个数D)加法运算符“+”和赋值运算符“=”都重载之后,意味着“+=”也被重载了13.有关运算符重载的说法错误的是()。A)在一个类中,可以对一个操作符进行多次重载B)重载赋值运算符“=”时,为了保持原有特性,重载运算符函数中应该使用返回语句“return*this;”C)C++中所有的运算符都可以被重载D)如果在某个类中使用成员函数对运算符重载,其左操作数必须是该类的对象14.已知某个类的友元函数重载了+=和-,a,b,c是该类的对象,则“a+=b-c”被C++编译器解释为()。A)operator+=(a,operator-(b,c))B)a.operator+=(b.operator-(c))C)operator+=(a,b.operator-(c))D)a.operator+=(operator-(b,c))15.下面4个选项中,专门用于读取单个字符的是()。A)cin.read()B)cin.get()C)cin.put()D)cin.getline()16.下列关于getline()函数的叙述中,错误的是()。A)getline()函数仅用于从键盘而不能从文件读取字符串B)getline()函数读取字符串长度是受限制的C)getline()函数读取字符串时,遇到终止符就停止D)getline()函数中所使用的终止符默认是换行符,也可指定其他终止符17.打开文件的方式中,()以追加方式打开文件。A)ios::inB)ios::outC)ios::appD)ios::trunc18.当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为()。A)ios::out|ios::binaryB)ios::in|ios::binaryC)ios::outD)ios::in19.有关函数模板和模板函数说法错误的是()。A)函数模板只是对函数的描述,编译器不为其产生任何执行代码,所以它不是一个实实在在的函数B)模板函数是实实在在的函数,它由编译系统在遇到具体函数调用时所生成,并调用执行C)函数模板需要实例化为模板函数后才能执行D)当函数模板和一般函数同名时,系统先去匹配函数模板,将其实例化后进行调用20.一个()允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。A)类模板B)模板类C)函数模板D)模板函数二、判断题(每空1分,共20分)注意:请将判断题结果(正确为T,错误为F)填写到下面表格中!得分12345678910111213141516171819201.类定义中的成员默认的访问权限是private。2.一个类中的保护成员和公有成员类似,在程序的任何地方都可以被访问。3.系统提供的缺省构造函数没有参数,所以自定义构造函数必须带有参数。4.一旦自定义了构造函数,系统便不再提供缺省的构造函数。5.一个类只能有一个构造函数和一个析构函数。6.静态数据成员必须在类中进行定义和初始化。7.静态成员函数中不能访问非静态成员。8.重载插入运算符“”必须采用成员重载。9.如果类A是类B的友类,那么类A中的所有成员函数都可以访问类B中的所有成员。10.释放派生类的对象时,首先调用基类的析构函数,然后调用派生类的析构函数。11.拥有纯虚函数的类称为虚拟基类,它不能用来定义对象。12.虚函数只有在有继承的情况时才会存在。13.已知:classBase1{//…};classBase2{//…};classDerived:publicBase1,publicBase2{Derived():Base2(),Base1(){}//…};创建Derived类的对象时,先调用Base2的构造函数,然后调用Base1的构造函数,最后调用Derived的构造函数。14.基类的指针或引用调用虚函数时采用后期绑定。15.由抽象基类继承得到的派生类肯定是具体类。16.友元函数内能够访问任何对象的任何成员。17.对二元运算符采用成员函数重载时,只需要一个参数,而且该参数可以是内部类型。18.对一元运算符采用某个类的友元函数重载时需要一个参数,参数为该类的对象,不能是其他类型。19.C++的输入/输出流库中,ios类是一个虚基类,istream类、ostream类以及streambuf类都是ios类的派生类。20.设inf是一个ifstream类的流对象,则inf.seekg(10,ios::beg);表示将文件指针从文件当前位置向后移动10个字节。三、读程序写结果(每空2分,共32分)(注意将结果写在下面相应横线上!)⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾_⑿⒀⒁⒂⒃1.写出下面程序的运行结果。#includeiostream.hclassA{public:A(){coutA::A()called.\n;}virtual~A(){coutA::~A()called.\n;}};classB:publicA{public:B(inti){coutB::B()called.\n;buffer=newchar[i];}virtual~B(){delete[]buffer;coutB::~B()called.\n;}private:char*buffer;得分};voidfun(A*a){deletea;}voidmain(){A*b=newB(10);fun(b);}运行结果:⑴⑵⑶⑷2.写出下面程序的运行结果。#includeiostream.hclassShape{public:voidDraw(){coutShapeendl;}virtualvoidPrint()=0;};classCircle:publicShape{private:doubler;public:voidDraw(){coutCircleendl;}voidSetData(doubleradius){r=radius;}voidPrint(){coutarea:3.14*r*rendl;}};classRectangle:publicShape{private:doublea,b;public:voidDraw(){coutRectangleendl;}voidSetData(doublex,doubley){a=x,b=y;}voidPrint(){coutarea:a*bendl;}};voidmain(){Circlec;Rectangler;Shape*sp1=&c;Shape&sp2=r;c.SetData(10);r.SetData(3,5);sp1-Draw();c.Print();sp2.Draw();r.Print();}运行结果:⑸⑹⑺⑻3.写出下面程序的运行结果(注:运行结果中首行的空白行不考虑)。#includeiostream.hclassCArray{public:CArray(inti){Length=i;Buffer=newchar[Length+1];}~CArray(){delete[]Buffer;}intGetLength(){returnLength;}char&operator[](inti);private:intLength;char*Buffer;};char&CArray::operator[](inti){staticcharch;if(iLength&&i=0)returnBuffer[i];else{cout\nIndexoutofrange.;returnch;}}voidmain(){intcnt;CArraystring1(6);char*string2=Nankai;for(cnt=0;cnt8;cnt++)string1[cnt]=string2[cnt];coutendl;for(cnt=0;cnt8;cnt++)coutstring1[cnt];cout\n;coutstring1.GetLength()endl;}运行结果:⑼⑽⑾⑿⒀⒁4.写出下面程序的运行结果。#includeiostream.hvoidfun(char*s){intn=0;while(s[n]!='\0')n++;chart,*p=s+n-1;while(sp){t=*s;*s=*p;*p=t;s++;p--;}}voidmain(){charstr[]=abcdefg;fun(str);coutstrendl;fun(str+1);coutstrendl;}运行结果:⒂⒃四、程序填空(每空2分,共28分)(注意将结果写在下面相应横线上!)⑴⑵⑶⑷
本文标题:C++试题及答案6
链接地址:https://www.777doc.com/doc-6108145 .html