计科一班C++复习资料说明:这上面的题目全部来自二级C++试卷,且基本涵盖上边所有与我们考试有关的题目。第一大项:选择题(1)基本书本概念题1.下列关于C++函数的叙述中,正确的是(C) A)每个函数至少要具有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己2.下列关于类和对象的叙述中,错误的是(A)A)一个类只能有一个对象B)对象是类的具体实例C)类是对某一类对象的抽象D)类和对象的关系是一种数据类型与变量的关系3)在C++中,用于实现运行时多态性的是D A)内联函数B)重载函数C)模板函数D)虚函数4).1在C++中,编译系统自动为一个类生成缺省构造函数的条件是(A)。A)该类没有定义任何有参构造函数B)该类没有定义任何无参构造函数C)该类没有定义任何构造函数D)该类没有定义任何成员函数4).2下列关于派生类构造函数和析构函数的说法中,错误的是(D)A)派生类的构造函数会隐含调用基类的构造函数B)如果基类中没有缺省构造函数,那么派生类必须定义构造函数C)在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D)在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数运算符的重载(书本P307)函数重载是对已有的运算符赋予多重含义,使用同一运算符作用于不同类型数据时导致不同的行为。三个规则5).1下列关于运算符重载的叙述中,错误的是(B)。A)有的运算符可以作为非成员函数重载B)所有的运算符都可以通过重载而被赋予新的含义(规则1中C++中除少数运算符外,全部可以重载)C)不得为重载的运算符函数的参数设置默认值D)有的运算符只能作为成员函数重载5).2下列有关函数重载的叙述中,错误的是(C)A)函数重载就是用相同的函数名定义多个函数B)重载函数的参数列表必须不同C)重载函数的返回值类型必须不同D)重载函数的参数可以带有默认值5).3关于函数重载,下列叙述中错误的是(C)A)重载函数的函数名必须相同B)重载函数必须在参数个数或类型上有所不同C)重载函数的返回值类型必须相同D)重载函数的函数体可以有所不同5).4下列关于运算符重载的描述中,正确的是(A)(一元就是单目,二元就是双目)A)运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B)一元运算符只能作为成员函数重载(也可以是非成员函数)C)二元运算符重载为非成员函数时,参数表中有一个参数(必须是两个)D)C++中可以重载所有的运算符5).5通过运算符重载,可以改变运算符原有的(A)A)操作数类型B)操作数个数C)优先级D)结合性5).6关于运算符重载,下列表述中正确的是(C)A)C++已有的任何运算符都可以重载B)运算符函数的返回类型不能声明为基本数据类型C)在类型转换符函数的定义中不需要声明返回类型D)可以通过运算符重载来创建C++中原来没有的运算符5).7下列关于运算符重载的叙述中,正确的是(B)A)通过运算符重载,可以定义新的运算符B)有的运算符只能作为成员函数重载C)若重载运算符+,则相应的运算符函数名是+(+(形参表))D)重载一个二元运算符时,必须声明两个形参(只有一个形参,左操作数是对象本身的数据,右操作数是形参)继承与派生1.派生类应当向基类的构造函数传递参数.6).1对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是(D)。A)公有或私有B)私有C)保护或私有D)公有或保护6).2下列有关类继承的叙述中,错误的是(D)A)继承可以实现软件复用B)虚基类可以解决由多继承产生的二义性问题C)派生类构造函数要负责调用基类的构造函数D)派生类没有继承基类的私有成员6).3如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是(D)B)public和protected C)protected和publicD)protected和protected6).4派生类的成员函数不能访问基类的(C)A)公有成员和保护成员B)公有成员C)私有成员D)保护成员6).5有如下类声明:classFoo{intbar;}则Foo类的成员bar是(C)(不定义就默认为私有成员)A}公有数据成员C}私有数据成员B)公有成员函数D)私有成员函数7)定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为(A)。A)私有继承B)非私有继承C)保护继承D)公有继承8)建立一个有成员对象的派生类对象时,各构造函数体的执行次序为(C)。A)派生类、成员对象类、基类B)成员对象类、基类、派生类C)基类、成员对象类、派生类D)基类、派生类、成员对象类9).1在一个抽象类中,一定包含有(C)。 A)虚函数B)纯虚函数C)模板函数D)重载函数10)下列有关C++流的叙述中,错误的是(A)A)C++操作符setw设置的输出宽度永久有效B)C++操作符endl可以实现输出的回车换行C)处理文件I/O时,要包含头文件fstreamD)进行输入操作时,eof()函数用于检测是否到达文件尾10).2如果利用C++流进行输入输出,下面的叙述中正确的是(A)A)只能借助于流对象进行输入输出B)只能进行格式化输入输出C)只能借助于cin和cout进行输入输出D)只能使用运算符和进行输入输出10).3使用输入输出操作符setw,可以控制(B)A)输出精度B)输出宽度C)对齐方式D)填充字符10).4下列关于C++流的说明中,正确的是(A)A)与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现B)从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作(读操作叫做提取,写操作叫做插入,选项正好反了。)C)cin是一个预定义的输入流类(CIN是一个预定义的输入流类ISTREAM的对象)D)输出流有一个名为open的成员函数,其作用是生成一个新的流对象(打开一个文件输入流关联的文件)10).5对于语句coutendlx;中的各个组成部分,下列叙述中错误的是(D)A)cout是一个输出流对象 B)endl的作用是输出回车换行C)x是一个变量D)称作提取运算符(提取运算符是“”,插入运算符是“”)虚函数必须是非静态成员函数。将基类中的同名函数定义位虚函数,这样通过基类型指针就可以使属于不同派生类的不同对象产生不同的行为。从而实现函数的多态(PAGE316)。纯虚函数是在基类中声明一个虚函数,基类中没有具体定义,要求各派生类根据实际情况给出具体定义,纯虚函数的声明以“=0;”结束抽象类:带有纯虚函数的类。11)下列有关抽象类和纯虚函数的叙述中,错误的是(D)A)拥有纯虚函数的类是抽象类,不能用来定义对象B)抽象类的派生类若不实现纯虚函数,它也是抽象类C)纯虚函数的声明以“=0;”结束D)纯虚函数都不能有函数体(纯虚函数的函数体由派生类给出。)11).2下列关于虚函数的说明中,正确的是(B)A)从虚基类继承的函数都是虚函数B)虚函数不能是静态成员函数C)只能通过指针或引用调用虚函数D)抽象类中的成员函数都是虚函数(12)对于一个类定义,下列叙述中错误的是(B)A)如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B)如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数(只有没有构造函数的情况下)D)进行输入操作时,eof()函数用于检测是否到达文件尾C)如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D)如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造.函数内联函数不是在调用时发生转移,而是编译时将函数体嵌入每一处调用处。注意现代的编译器,没有inline也可以是内联函数。13).1下列有关内联函数的叙述中,正确的是(C)A)内联函数在调用时发生控制转移B)内联函数必须通过关键字inline来定义C)内联函数是通过编译器来实现的D)内联函数函数体的最后一条语句必须是return语句13).2下列关于C++函数的说明中,正确的是(C)A)内联函数就是定义在另一个函数体内部的函数B)函数体的最后一条语句必须是return语句 C)标准C++要求在调用一个函数之前,必须先声明其原型D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式标示符:程序员定义的单词。C++中的标识符的构成规则如下:1.以大写字母和小写字母以及下划线开始2.由大小写母,数字,下划线组成。3.大小字母表示不同的意义。4.不能是C++的关键字。(14)下列符号中可以用作C++标识符的是(A)A)_radiusB)foo~bar(出现不明符号)C)else(关键字)D)3room(不能由数字开始)14).1下列字符串中,正确的C++标识符是(D)A)foo-1B)2bC)newD)_256函数模板TEMPLATE模板参数表类型名函数名参数表{函数体的定义}所有模板的定义都是用TEMPLATE开始的,模板参数表用逗号相隔的模板参数构成类模板:定义一个类的家族,使得一些数据成员,成员函数的参数,返回值,局部变量能取任意类型。(15)下列关于模板的叙述中,错误的是(C)A)模板声明中的第一个符号总是关键字templateB)在模板声明中用和括起来的部分是模板的形参表C)类模板不能有数据成员D)在一定条件下函数模板的实参可以省略THIS指针是类自动生成自动影藏的私有成员,它存在于非静态成员函数中,指向被调用的函数所在对象地址。全局只有一个THIS指针,当一个对象被创建时,THIS就指向对象数据的首地址。(16)下列关于this指针的叙述中,正确的是(D)A)任何与类相关的函数都有this指针B)类的成员函数都有this指针C)类的友元函数都有this指针D)类的非静态成员函数才有this指针(2)程序运行结果题枚举元素常常具有默认值,比如下面这个题目中NAME=0,NUMBER=1,PLUS=5,MINUS=6,PRINT=10.1已知枚举类型定义语句为:enumToken{NAME,NUMBER,PLUS=5,MINUS,PRINT=10};则下列叙述中错误的是(A)A)枚举常量NAME的值为1B)枚举常量NUMBER的值为1C)枚举常量MINUS的值为6D)枚举常量PRINT的值为102执行语句序列 inti=0;while(i25)i+=3;couti;输出结果是(C) A)24 B)25C)27D)28 4有如下程序:#includeiostreamvoidfun(int&x,inty){intt=x;x=y;y=t;}intmain() {inta[2]={23,42}; fun(a[1],a[0]);std::couta[0],a[1]std::endl;return0;}执行后的输出结果是(B)A)42,42B)23,23C)23,42D)42,23分析:a[0]=23,a[1]=42,fun(a[1],a[0]);int&x=42,y=23,交换次序后x=23,y=42,int&x表示按地址出送,只要x的值变化了原来的a[1]也变化。Intx则指变量本身,局部变量变化不会改变变量的值。5有如下类声明:classMyBASE{ intk;public: voidset(intn){k=n;}intget()const{returnk;}}; classMyDERIVED:protectedMyBASE{ protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}intget()const{returnMyBASE::get()+j;}};};则类MyDERIVED中保护的数据成员和成员函数的个数是(B)A)4B)3C)2D)1分析:MyDERIVED是MyBASE的保护继承,所以两个成员函数都是受保护的。6.有如下程序:#includeiostreamusin