最新C++期末考试复习题理工Word格式.docx
《最新C++期末考试复习题理工Word格式.docx》由会员分享,可在线阅读,更多相关《最新C++期末考试复习题理工Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
func1()都是虚函数B.A:
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)
#include
class
Base
{
public:
void
fun(){cout<
"
Base:
fun"
endl;
}
};
Derived:
public
void
fun()
{_____________
//显示调用基类的函数fun()
cout<
ENDL;
A.fun();
B.Base.fun();
C.Base:
fun();
D.
Base->
5.面向对象程序设计将数据与(
A
)放在一起,做为一个相互依存、不可分割的整体来处理。
A.对数据的操作B.信息C.数据隐藏D.数据抽象
6.在类中声明转换函数时不能指定(
A
A.参数
B.访问权限
C.操作
D.标识符
7.在派生类中重新定义虚函数时必须在(
)方面与基类保持一致。
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:
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_____类。
在下面横线处填上适当字句,完成类中成员函数的定义。
A{
int
*
a;
A(int
aa=0)
a=_newint(aa)______;
//
用
aa
初始化
a
所指向的动态对象
}
~
A(){_____deletea____;
}//
释放动态存储空间
7.C++支持面向对象程序设计的四个要素是:
封装性、继承性、抽象性和多态性。
8.模板分为类模板和函数模板。
1.在下面选项中,对类的拷贝构造函数的声明形式是(B)
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.只含有一个纯虚函数
只含有一个虚函数
5.有关运算符重载正确的描述是(D)
A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级
C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能
6.下列说法正确的是(D)。
A.一个类的对象可以是另一个类的成员B.一个类可以作为另一个类的派生类
C.一个类可以在另一个类定义体进行定义D.以上说法均正确
7.有如下程序:
#include<
iostream.h>
classBASE{
charc;
BASE(charn):
c(n){}
virtual~BASE(){cout<
c;
classDERIVED:
publicBASE
{
charc;
DERIVED(charn):
BASE(n+1),c(n){}
~DERIVED(){cout<
intmain()
{
DERIVED('
X'
);
return0;
}
执行上面的程序将输出(C)。
A)X
B)YX
C)XY
D)Y
8.类MyClass的定义如下:
classMyClass
{public:
MyClass(){value=0;
SetValue(inti){value=i;
private:
intvalue;
则对语句:
MyClass*p,my;
p=&
my;
正确的描述是(D)。
A.语句p=&
是把对象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.私有继承的公有成员
1.定义内联函数所用的关键字inline,定义友元所用的关键字为friend。
2.当一个派生类具有多个基类时,这种继承方式称为_多重继承__。
3.通过一个构造函数调用虚函数时,C++系统对该调用采用静态联编。
4.任何类中允许有_privated____、public____、_protected____三种访问控制类型的成员,数据成员和成员函数的默认类型为__privated___。
5.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。
6.C++标准库中的异常层次的根类定义在库的头文件_exception.h
______中。
7.运算符重载使用的两种方式是_____成员函数______和友元函数_______。
8.C++支持面向对象程序设计的四个要素是:
抽象性、多态性________、封装性________和____继承性____。
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)
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.函数重载
1.成员名限定的符号是:
:
,它可以在引用成员时避免二义性。
2.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。
3.模板分为类模板和函数模板。
4.在用class定义一个类时,数据成员和成员函数的默认访问权限是private。
5.已知intDBL(intn){returnn+n;
}和longDBL(longn){returnn+n;
}是一个函数模板的两个实例,则该函数模板的定义是template<typename T> T DBL(T n){return n+n}。
(要求写出函数模板的完整定义)
6.静态数据成员必须在类外进行初始化。
7.含有纯虚函数的类称为抽象类。
8.若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为aQueue.show()和Queue:
show()。
9.定义内联函数所用的关键字为inline,定义友元所用的关键字为friend。
10.使用成员函数重载运算符时,若运算符是二元的,则参数表中有1个操作数,此时 当前对象作为此运算符的左操作数。
1.下面有关重载函数的说法中正确的是(C)
A.重载函数必须具有不同的返回值类型;
B.重载函数形参个数必须//先匹配个数在匹配类型
C.重载函数必须有不同的形参列表 D.重载函数名可以不同;
不同;
2.使用string类建立对象的不正确方式是(D)。
A.stringstr(“OK”);
B.stringstr=”OK”;
C.stringstr;
D.stringstr=’OK’;
3.面关于C++中类的继承与派生的说法错误的是(C)
C.私有派生时,基类的所有成员访问权限在派生类中保持不变
D.继承可以分为单一继承与多重继承
4.面向对象程序设计将数据与(A)放在一起,作为一个相互依存、不可分割的整体来处理。
A.对数据的操作B.信息C.数据隐藏D.数据抽象
5.一个类的析构函数A。
A.唯一的B.允许重载C.至多可有两个D.只能是缺省的
6.下列各类函数中,(C)不是类的成员函数。
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
7.在下面选项中,对类的拷贝构造函数的声明形式是(B)
A.A:
8.下面关于静态成员描述正确的是(B)
A.静态成员是对象的数据成员B.静态成员是对象的成员C.静态成员是对象的成员函数D.静态成员不是对象的成员
9.下面关于成员函数特征的描述中,错误的是(A)
A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的
10.下面叙述正确的是(D)
A.基类的保护成员在派生类中仍然是保护的B.基类的公有成员在派生类中仍然是公有的
C.基类的私有成员在派生类中是私有的D.从基类派生时,可以有3种派生方法
1.classbase{
inta;
intb;
intf(inti,intj);
classderive:
base{
intc;
intbase:
b;
base:
f(inti,intj);
[1]
[2]
2.#include<
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{
staticintb;
base(intm,intn):
a(m),b(n){}
staticintgeta(){returna;
staticintgetb(){returnb;
voidshow(){cout<
geta()<
”,”<
getb()<
intb=45;
voidmain(){}
[6]
[7]
[8]
[1]intbase:
[2]base:
[1]base:
(或访问声明仅仅调整名字的访问,不可为它说明任何类型)
f;
(或访问声明不应说明函数参数)
[3]voidA(inti=0){m=i;
[4]void~A(){}
[5]a.m+=10;
[3]构造函数去掉void(或构造函数不能指定返回值类型)
[4]析构函数去掉void(或析构函数不能指定返回值类型)
[5]对象不能访问私有成员
[6]base(intm,intn):
[7]staticintgeta(){returna;
[8]base:
[6]不能通过构造函数初始化静态数据成员(只要把b(n)去掉即可)
[7]静态成员函数中不能引用非静态成员数据成员(或去掉static)
[8]intbase:
b=45;
1.Template<
classT>
Tfun(Tx)
Ty;
y=T-2*x;
retruny;
2.classbase
f();
f(inta);
f(char*p);
base
voidf(ints);
base:
3.#include<
classA
voidsetA(int);
voidshowA();
inta;
classB
voidsetB(int);
voidshowB();
intb;
classC:
publicA,privateB
voidsetC(int,int,int);
voidshowC();
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<
[2]y=T-2*x;
[1]改为template<
[2]T不能用作-的操作数
[3]base: