C++期末考试复习题(理工)_第1页
C++期末考试复习题(理工)_第2页
C++期末考试复习题(理工)_第3页
C++期末考试复习题(理工)_第4页
C++期末考试复习题(理工)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++期末考试复习题(理工)C++期末考试复习题(理工)C++期末考试复习题(理工)V:1.0精细整理,仅供参考C++期末考试复习题(理工)日期:20xx年X月一、单项选择题(本大题共10小题,每小题2分,共20分)1.在C++中,函数原型不能标识(D)A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能2.在C++程序中,对象之间的相互通信通过(B)A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现3.对于任意一个类,析构函数的个数最多为(B)A.0B.1C.2D.35.友元关系不能(A)A.继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率6.语句ofstreamf(″SALARY.DAT″,ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且(A)A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件7.下面说法正确的是(B)A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline定义//当程序使用内敛函数时,编译器将每个函数调用都用函数内的语句代替,这样就省去了函数调用地开销8.可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D)A.私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员//函数可以调用成员,对象不可以调用9.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是(C)A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针//派生类的对象是不能访问基类的任何成员10.对于类定义classA{public:virtualvoidfunc1(){}voidfunc2(){}};classB:publicA{public:voidfunc1(){cout<<″classBfunc1″<<end1;}virtualvoidfunc2(){cout<<″classBfunc2″<<end1;}};下面正确的叙述是(C)A.A::func2()和B::func1()都是虚函数B.A::func2()和B::func1()都不是虚函数C.B::func1()是虚函数,而A::func2()不是虚函数D.B::func1()不是虚函数,而A::func2()是虚函数第二部分非选择题(共80分)二、填空题(本大题共10小题,每小题2分,共20分)11.定义类的动态对象数组时,系统只能够自动调用该类的_无参_______构造函数对其进行初始化。12.在C++程序设计中,建立继承关系倒挂的树应使用____单_一____继承。13.表达式cout<<end1还可表示为____cout<<`\n`_____。14.基类的公有成员在派生类中的访问权限由___访问控制_____决定。15.C++支持的两种多态性分别是__编译时的_(操作重载)_静态_____多态性和_运行时的(虚函数)___动态_____多态性。16.C++中语句constchar*constp=″hello″;所定义的指针p和它所指的内容都不能被__改变(重新赋值)____。17.假定AB为一个类,则语句AB(AB&x);为该类_____拷贝____构造函数的原型说明。18.将关键字const写在成员函数的____函数头_____和____函数体_____之间时,所修饰的是this指针。19.在C++中,访问一个对象的成员所用的运算符是__·___,访问一个指针所指向的对象的成员所用的运算符是__>___。20.派生类从一个或多个以前定义的该类的__基类__一、单项选择题(每题2分,共20分)1.派生类对象可访问基类中的什么成员(

A)A.公有继承的公有成员

B.公有继承的私有成员

C.公有继承的保护成员

D.私有继承的公有成员2.定义析构函数时,应该注意(

C

)A.其名与类名完全相同

B.返回类型是void类型

C.无形参,也不可重载

D.函数体中必须有delete语句3.如果类A被说明成类B的友元,则(D

)。

A.类A的成员即类B的成员

B.类B的成员即类A的成员

C.类A的成员函数不得访问类B的成员

D.类B不一定是类A的友元

4.应在下列程序划线处填入的正确语句是(C)#includeclass

Base{

public:void

fun(){cout<<"Base::fun"<<endl;}};class

Derived:public

Base{

void

fun(){_____________

//显示调用基类的函数fun()cout<<"Derived::fun"<<ENDL;}};A.fun();

B.Base.fun();

C.Base::fun();

D.

Base->fun();5.面向对象程序设计将数据与(

A

)放在一起,做为一个相互依存、不可分割的整体来处理。A.对数据的操作 B.信息 C.数据隐藏 D.数据抽象6.在类中声明转换函数时不能指定(

A

)。

A.参数

B.访问权限

C.操作

D.标识符

7.在派生类中重新定义虚函数时必须在(

A

)方面与基类保持一致。

A.参数类型

B.参数名字

C.操作内容

D.赋值8.下面关于C++中类的继承与派生的说法错误的是(C)。A.基类的protected成员在公有派生类的成员函数中可以直接使用B.基类的protected成员在私有派生类的成员函数中可以直接使用C.公有派生时,基类的所有成员访问权限在派生类中保持不变D.基类的protected成员在保护派生类的成员函数中可以直接使用9.重载赋值操作符时,应声明为(

C

)函数。

A.友元

B.虚

C.成员

D.多态10.语句

ofstream

f(″SALARY.DAT″,ios::app|ios::binary);

的功能是建立流对象

f,试图打开文件

SALARY.DAT

并与之连接,并且

(A

)

A.

若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件

B.

若文件存在,将其置为空文件;若文件不存在,打开失败

C.

若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.

若文件存在,打开失败;若文件不存在,建立一个新文件

二、填空题(每空2分,共30分)1.假定

AB

为一个类,则语句

AB(AB&x)

;为该类

_________

复制构造函数的原型说明。2.C++

支持的两种多态性分别是

________编译时的_

多态性和

运行时的_________

多态性。3.定义类的动态对象数组时,系统只能够自动调用该类的

无参的_________

构造函数对其进行初始化。4.运算符重载时,其函数名由__operator运算符_构成。成员函数重载双目运算符时,左操作数是_当前对象__,右操作数是__函数形参_。C++标准库中的异常层次的根类为exception_____类;MFC类库中绝大多数类都源自根类__CObject_____类。在下面横线处填上适当字句,完成类中成员函数的定义。

class

A{

int

*

a;

public:

A(int

aa=0)

{

a=_newint(aa)______;//

aa

初始化

a

所指向的动态对象

}

A(){_____deletea____;}//

释放动态存储空间

};

7.C++支持面向对象程序设计的四个要素是:封装性、继承性、抽象性和多态性。8.模板分为类模板和函数模板。一、单项选择题(每题2分,共20分)1.在下面选项中,对类的拷贝构造函数的声明形式是(B)A.A::A(&)B.A::A(constA&)C.A::A(A)D.voidA::A(A&a)2.下面关于成员函数特征的描述中,错误的是(A)A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的3.下面关于类模板叙述不正确的是(B)A.可以有多个构造函数B.类模板是模板类的实例C.一个类模板可以用来实例化多个模板类D.类模板可以有多个参数4.要使一个类成为抽象类,这个类应具有的条件是(A)A.至少有一个纯虚函数

B.至少有一个虚函数C.只含有一个纯虚函数

D.

只含有一个虚函数5.有关运算符重载正确的描述是(D)A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能6.下列说法正确的是(D)。A.一个类的对象可以是另一个类的成员B.一个类可以作为另一个类的派生类C.一个类可以在另一个类定义体进行定义D.以上说法均正确7.有如下程序:#include<iostream.h>classBASE{charc;public: BASE(charn):c(n){} virtual~BASE(){cout<<c;}};classDERIVED:publicBASE{ charc;public: DERIVED(charn):BASE(n+1),c(n){} ~DERIVED(){cout<<c;}};intmain(){ DERIVED('X'); return0;}执行上面的程序将输出(C)。A)X

B)YX

C)XY

D)Y8.类MyClass的定义如下:classMyClass{public:MyClass(){value=0;}SetValue(inti){value=i;}private:intvalue;};则对语句:MyClass*p,my;p=&my;正确的描述是(D)。A.语句p=&my;是把对象my赋值给指针变量p;B.语句MyClass*p,my;会调用两次类MyClass的构造函数C.对语句*p.SetValue(5)的调用是正确的D.语句p->SetValue(5)与my.SetValue(5)等价9.下列各类函数中,C不是类的成员函数。A.构造函数B.析构函数C.友元函数D.拷贝构造函数10.

派生类的对象对它的基类成员中A是可以访问的。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员二、填空题(每空2分,共30分)1.定义内联函数所用的关键字inline,定义友元所用的关键字为friend。2.当一个派生类具有多个基类时,这种继承方式称为_多重继承__。3.通过一个构造函数调用虚函数时,C++系统对该调用采用静态联编。4.任何类中允许有_privated____、public____、_protected____三种访问控制类型的成员,数据成员和成员函数的默认类型为__privated___。5.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。6.C++标准库中的异常层次的根类定义在库的头文件_exception.h______中。7.运算符重载使用的两种方式是_____成员函数______和友元函数_______。8.C++支持面向对象程序设计的四个要素是:抽象性、多态性________、封装性________和____继承性____。一、单项选择题(每题2分,共20分)1.下面有关构造函数和new运算符关系正确的说法是(D)A.new运算符不调用构造函数B.构造函数一定调用new运算符C.当生成新类的实例时,先调用new运算符,然后调用构造函数进行初始化D.当new运算符动态产生类的对象时,new运算符也自动调用构造函数2.下面有关类性质的说法错误的是(D)A.一个类可以有多个构造函数,但只有一个析构函数B.析构函数和构造函数都不能有返回类型C.不能给析构函数指定参数D.一个类中不可以声明具有类类型的数据成员3.下面关于友元函数描述正确的是(C)A.友元函数是类的成员B.友元函数在类的外部声明C.友元函数在类中声明D.友元函数能够派生4.下面叙述正确的是(D)A.派生类不可以使用私用派生B.保护派生时,基类的保护成员在派生类中是公有的C.对基类成员的访问允许二义性D.赋值兼容规则也适用于多重继承的组合5.有关运算符重载正确的描述是(D)A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能6.下面描述中,表达错误的是(B)A.公有继承时基类中的public成员在派生类中仍是public的B.公有继承是基类中的private成员在派生类中仍是private的C.公有继承时基类中的protected成员在派生类中仍是protected的D.私有继承时基类中的public成员在派生类中是private的7.拷贝构造函数的参数是(C)A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名8.下列关于构造函数的描述中,错误的是(D)A.构造函数可以设置默认参数B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数D.构造函数不可以重载9.数组作为函数的形参时,把数组名作为实参,传递给函数的是(A)A.该数组的首地址B.该数组的元素个数C.该数组中的各元素值D.该数组的大小10.通过一个析构函数调用虚函数时,C++系统对该调用采用(B)。A.动态联编B.静态联编C.不确定是哪种联编D.函数重载二、填空题(每空2分,共30分)1.成员名限定的符号是::,它可以在引用成员时避免二义性。2.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。3.模板分为类模板和函数模板。4.在用class定义一个类时,数据成员和成员函数的默认访问权限是private。5.已知intDBL(intn){returnn+n;}和longDBL(longn){returnn+n;}是一个函数模板的两个实例,则该函数模板的定义是template<typenameT>TDBL(Tn){returnn+n}。(要求写出函数模板的完整定义)6.静态数据成员必须在类外进行初始化。7.含有纯虚函数的类称为抽象类。8.若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为aQueue.show()和Queue::show()。9.定义内联函数所用的关键字为inline,定义友元所用的关键字为friend。10.使用成员函数重载运算符时,若运算符是二元的,则参数表中有1个操作数,此时当前对象作为此运算符的左操作数。一、单项选择题(每题2分,共20分)1.下面有关重载函数的说法中正确的是(C)A.重载函数必须具有不同的返回值类型;B.重载函数形参个数必须//先匹配个数在匹配类型C.重载函数必须有不同的形参列表D.重载函数名可以不同;不同;2.使用string类建立对象的不正确方式是(D)。A.stringstr(“OK”);B.stringstr=”OK”;C.stringstr;D.stringstr=’OK’;3.面关于C++中类的继承与派生的说法错误的是(C)A.基类的protected成员在公有派生类的成员函数中可以直接使用B.基类的protected成员在私有派生类的成员函数中可以直接使用C.私有派生时,基类的所有成员访问权限在派生类中保持不变D.继承可以分为单一继承与多重继承4.面向对象程序设计将数据与(A)放在一起,作为一个相互依存、不可分割的整体来处理。A.对数据的操作 B.信息 C.数据隐藏 D.数据抽象5.一个类的析构函数A。A.唯一的B.允许重载C.至多可有两个D.只能是缺省的6.下列各类函数中,(C)不是类的成员函数。A.构造函数B.析构函数C.友元函数D.拷贝构造函数7.在下面选项中,对类的拷贝构造函数的声明形式是(B)A.A::A(&)B.A::A(constA&)C.A::A(A)D.voidA::A(A&a)8.下面关于静态成员描述正确的是(B)A.静态成员是对象的数据成员B.静态成员是对象的成员C.静态成员是对象的成员函数D.静态成员不是对象的成员9.下面关于成员函数特征的描述中,错误的是(A)A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的10.下面叙述正确的是(D)A.基类的保护成员在派生类中仍然是保护的B.基类的公有成员在派生类中仍然是公有的C.基类的私有成员在派生类中是私有的D.从基类派生时,可以有3种派生方法1.classbase{inta;public:intb;intf(inti,intj);};classderive:base{intc;public:intbase::b;base::f(inti,intj);};[1][2]2.#include<iostream.h>classA{public: voidA(inti=0){m=i;} voidshow(){cout<<m;} void~A(){}private: intm;};voidmain(){ Aa(5); a.m+=10; a.show();}[3][4][5]3.#include<iostream>usingnamespacestd;classbase{inta;staticintb;public:base(intm,intn):a(m),b(n){}staticintgeta(){returna;}staticintgetb(){returnb;}voidshow(){cout<<geta()<<”,”<<getb()<<endl;}};base::intb=45;voidmain(){}[6][7][8][1]intbase::b;[2]base::f(inti,intj);[1]base::b;(或访问声明仅仅调整名字的访问,不可为它说明任何类型)[2]base::f;(或访问声明不应说明函数参数)[3]voidA(inti=0){m=i;}[4]void~A(){}[5]a.m+=10;[3]构造函数去掉void(或构造函数不能指定返回值类型)[4]析构函数去掉void(或析构函数不能指定返回值类型)[5]对象不能访问私有成员[6]base(intm,intn):a(m),b(n){}[7]staticintgeta(){returna;}[8]base::intb=45;[6]不能通过构造函数初始化静态数据成员(只要把b(n)去掉即可)[7]静态成员函数中不能引用非静态成员数据成员(或去掉static)[8]intbase::b=45;1.Template<classT>Tfun(Tx){Ty;y=T-2*x;retruny;}[1][2]2.classbase{public:f();f(inta);f(char*p);};classderive:base{public:voidf(ints);base::f;};3.#include<iostream.h>classA{public:voidsetA(int);voidshowA();private:inta;};classB{public:voidsetB(int);voidshowB();private:intb;};classC:publicA,privateB{public:voidsetC(int,int,int);voidshowC();private:intc;};voidA::setA(intx){a=x;}voidB::setB(intx){b=x;}voidC::setC(intx,inty,intz){a=x;b=y; setA(x);setB(y);c=z;}[1]Template<classT>[2]y=T-2*x;[1]改为template<classT>[2]T不能用作-的操作数[3]base::f;[3]派生类中具有与基类同名的函数,则基类中的此函数不能在派生类中进行访问声明[4]a=x;[5]b=y;[6]obj.setB(6);[7]obj.showB();[8]return0;[4]派生类不能访问基类A类的私有成员[5]派生类不能访问基类B类的私有成员[6]不能访问B类的公有成员setB[7]不能访问B类的公有成员showB[8]去掉此语句,或主函数的返回值void去掉或改为int填空(每题2分,共20分)C++程序中,对象的初始化和清理工作,分别由两个特殊的成员函数()和()来完成。在c++中,分别用(变量)与(函数)来表现某种事物的所具有的属性和行为,并且将它们封装在一起,形成一种抽象数据类型——类。当用一个对象初始化另一个新的同类对象,将调用(),其特殊之处在于:形参是()。模板是C++支持参数化的工具,我们通常用类模板和函数模板,这些只是面向对象的()性的一个方面。如果在某个类定义中用关键字()声明了一个外部函数(也许是其他类的一个成员)后,这个外部函数就可以例外的访问该类的任何成员,这个外部函数称为类的()函数。可以将类的成员声明为static,使其成为()。这样的成员在编译时被创建,其实例只有一个,为所有该类的对象()。()是动态动态联编的基础。它是非静态的成员函数,经过()之后,在类族中可以实现运行过程中的多态。程序中有如下语句:inta=30;intb=a++;intc=++a;则b=(),c=()数组A[20][20]中,第一个元素是(),最后一个元素是()10、声明一个int型指针,请为其动态分配含10个元素的地址空间:()。程序分析(30分)1、分析程序,写出程序的输出结果(7分)。#include<iostream.h>classClock{private:intHour,Minute,Second;public:voidSetTime(intNewH=24,intNewM=24,intNewS=24){Hour=NewH;Minute=NewM;Second=NewS;}voidShowTime(){cout<<Hour<<”:”<<Minute<<”:”<<Second<<endl;}};voidmain(){cout<<”timesetandoutput:”<<endl;ClockMyClock;MyCLock.SetTime();MyClock.ShowTime();MyClock.SetTime(8,30,30);MyClock.ShowTime();}2、分析程序,写出程序的输出结果(7分)。#include<iostream.h>classpoint{private:intx,y;public:point(intxx=0,intyy=0){x=xx;y=yy;cout<<”构造函数被调用”<<endl;}point(point&p);intGetX(){returnx;}intGetY(){returny;}};point::point(point&p){x=p.x;y=p.y;cout<<”拷贝构造函数被调用”<<endl;}voidmain(){pointA(4,5);pointB(A);cout<<B.GetX()<<endl;}在括号中注释相应的语句(8分)//有动态栈区的stack类classstack{intstacksize;long*buffer;long*sp;public:stack(intsize)//(){stacksize=size;sp=buffer=newlong[size];//()}~stack()//(){deletebuffer;}//()};voidpush(long);longpop();};voidstack::push(longdata){if(sp>=buffer+stacksize)cout<<"overflow!\n";else{*sp=data;sp++;}}longstack::pop(){if(sp<=buffer){cout<<"stackisempty!\n";return0;}elsereturn(*--sp);}voidmain(){stack*pa=new

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论