C++期末考试复习题Word文档格式.docx
《C++期末考试复习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++期末考试复习题Word文档格式.docx(26页珍藏版)》请在冰点文库上搜索。
![C++期末考试复习题Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/dbabbb62-264e-417d-83fc-e9bade18d4dc/dbabbb62-264e-417d-83fc-e9bade18d4dc1.gif)
下面正确的叙述是(C)
A.A:
func2()和B:
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.派生类从一个或多个以前定义的该类的__基类__
1.D2.B3.B4.A5.A6.A7.B8.D9.C10.C
11.无参12.单一(或单)13.cout<
′\n′(或cout<
′\12′,或cout<
′\xA′,或其它等价形式)
14.访问控制(或其它等价形式)15.编译时的(或静态,或操作重载)运行时的(或动态,或虚函数)
16.改变(或重新赋值)17.复制初始化(或拷贝)18.函数头(或参数表)函数体
19.成员选择运算符(或“.”)成员访问运算符(或“>
”)20.基类
一、单项选择题(每题2分,共20分)
1.派生类对象可访问基类中的什么成员(
)
A.公有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.私有继承的公有成员
2.定义析构函数时,应该注意(
)
A.其名与类名完全相同
B.返回类型是void类型
C.无形参,也不可重载
D.函数体中必须有delete语句
3.如果类A被说明成类B的友元,则(
)。
A.类A的成员即类B的成员
B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员
D.类B不一定是类A的友元
4.应在下列程序划线处填入的正确语句是()
#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.对数据的操作B.信息C.数据隐藏D.数据抽象
6.在类中声明转换函数时不能指定(
A.参数
B.访问权限
C.操作
D.标识符
7.在派生类中重新定义虚函数时必须在(
)方面与基类保持一致。
A.参数类型
B.参数名字
C.操作内容
D.赋值
8.下面关于C++中类的继承与派生的说法错误的是()。
A.基类的protected成员在公有派生类的成员函数中可以直接使用
B.基类的protected成员在私有派生类的成员函数中可以直接使用
C.公有派生时,基类的所有成员访问权限在派生类中保持不变
D.基类的protected成员在保护派生类的成员函数中可以直接使用
9.重载赋值操作符时,应声明为(
)函数。
A.友元
B.虚
C.成员
D.多态
10.语句
ofstream
f(″SALARY.DAT″,ios:
binary);
的功能是建立流对象
f,试图打开文件
SALARY.DAT
并与之连接,并且
(
)
A.
若文件存在,将文件写指针定位于文件尾;
若文件不存在,建立一个新文件
B.
若文件存在,将其置为空文件;
若文件不存在,打开失败
C.
若文件存在,将文件写指针定位于文件首;
D.
若文件存在,打开失败;
二、填空题(每空2分,共30分)
1.假定
AB
为一个类,则语句
AB(AB&
x)
;
为该类
_________
构造函数的原型说明。
2.C++
支持的两种多态性分别是
多态性和
多态性。
3.定义类的动态对象数组时,系统只能够自动调用该类的
构造函数对其进行初始化。
4.运算符重载时,其函数名由___构成。
成员函数重载双目运算符时,左操作数是___,右操作数是___。
C++标准库中的异常层次的根类为_____类;
MFC类库中绝大多数类都源自根类_______类。
在下面横线处填上适当字句,完成类中成员函数的定义。
A{
int
*
a;
A(int
aa=0)
a=_________;
//
用
aa
初始化
a
所指向的动态对象
}
~
A(){_________;
}//
释放动态存储空间
7.C++支持面向对象程序设计的四个要素是:
封装性、继承性、和。
8.模板分为模板和模板。
1.A2.C3.D4.C5.A6.A7.A8.C9.C10.A
拷贝或复制
运行(时)编译(时)(二者位置可互换)(或改为静态和动态也可)
无参(缺省或默认均可)
operator运算符(运算符可写为@,若没写扣1分)(当前)对象函数的形参(参数)
exception(若e写为大写字母则扣0.5分,单词稍微写错扣0.5分)CObject(字母CO为大写字母,写为小写各扣0.5分)
newint(aa)deletea(有new、delete各给1分,int给0.5分)
抽象性多态性(二者位置可互换)
类函数(二者位置可互换)
1.在下面选项中,对类的拷贝构造函数的声明形式是()
A(&
)B.A:
A(constA&
)C.A:
A(A)D.voidA:
A(A&
a)
2.下面关于成员函数特征的描述中,错误的是()
A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的
3.下面关于类模板叙述不正确的是()
A.可以有多个构造函数B.类模板是模板类的实例C.一个类模板可以用来实例化多个模板类D.类模板可以有多个参数
4.要使一个类成为抽象类,这个类应具有的条件是()
A.至少有一个纯虚函数
B.至少有一个虚函数C.只含有一个纯虚函数
只含有一个虚函数
5.有关运算符重载正确的描述是()
A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级
C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能
6.下列说法正确的是()。
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;
}
执行上面的程序将输出()。
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;
正确的描述是()。
A.语句p=&
是把对象my赋值给指针变量p;
B.语句MyClass*p,my;
会调用两次类MyClass的构造函数
C.对语句*p.SetValue(5)的调用是正确的D.语句p->
SetValue(5)与my.SetValue(5)等价
9.下列各类函数中,不是类的成员函数。
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
10.
派生类的对象对它的基类成员中是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员
1.定义内联函数所用的关键字,定义友元所用的关键字为。
2.当一个派生类具有多个基类时,这种继承方式称为___。
3.通过一个构造函数调用虚函数时,C++系统对该调用采用联编。
4.任何类中允许有_____、____、_____三种访问控制类型的成员,数据成员和成员函数的默认类型为______。
5.只有在继承的情况下,基类和派生类之间才有赋值兼容性规则。
6.C++标准库中的异常层次的根类定义在库的头文件_______中。
7.运算符重载使用的两种方式是___________和_______。
8.C++支持面向对象程序设计的四个要素是:
抽象性、________、________和________。
1.B2.A3.B4.A5.D6.D7.C8.D9.C10.A
inlinefriend
多重继承
静态
privateprotectedpublic(三者位置可以互换)private
公有
exception.h
成员函数友元函数(二者位置可互换)
多态性继承性封装性(三者位置可互换)
1.下面有关构造函数和new运算符关系正确的说法是()
A.new运算符不调用构造函数B.构造函数一定调用new运算符
C.当生成新类的实例时,先调用new运算符,然后调用构造函数进行初始化
D.当new运算符动态产生类的对象时,new运算符也自动调用构造函数
2.下面有关类性质的说法错误的是()
A.一个类可以有多个构造函数,但只有一个析构函数B.析构函数和构造函数都不能有返回类型
C.不能给析构函数指定参数D.一个类中不可以声明具有类类型的数据成员
3.下面关于友元函数描述正确的是()
A.友元函数是类的成员B.友元函数在类的外部声明C.友元函数在类中声明D.友元函数能够派生
4.下面叙述正确的是()
A.派生类不可以使用私用派生B.保护派生时,基类的保护成员在派生类中是公有的
C.对基类成员的访问允许二义性D.赋值兼容规则也适用于多重继承的组合
6.下面描述中,表达错误的是()
A.公有继承时基类中的public成员在派生类中仍是public的B.公有继承是基类中的private成员在派生类中仍是private的
C.公有继承时基类中的protected成员在派生类中仍是protected的
D.私有继承时基类中的public成员在派生类中是private的
7.拷贝构造函数的参数是()
A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名
8.下列关于构造函数的描述中,错误的是()
A.构造函数可以设置默认参数B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数D.构造函数不可以重载
9.数组作为函数的形参时,把数组名作为实参,传递给函数的是()
A.该数组的首地址B.该数组的元素个数C.该数组中的各元素值D.该数组的大小
10.通过一个析构函数调用虚函数时,C++系统对该调用采用( )。
A.动态联编B.静态联编C.不确定是哪种联编D.函数重载
1.成员名限定的符号是,它可以在引用成员时避免。
2.只有在继承的情况下,基类和派生类之间才有赋值兼容性规则。
3.模板分为模板和模板。
4.在用class定义一个类时,数据成员和成员函数的默认访问权限是。
5.已知intDBL(intn){returnn+n;
}和longDBL(longn){returnn+n;
}是一个函数模板的两个实例,则该函数模板的定义是。
(要求写出函数模板的完整定义)
6.静态数据成员必须在进行初始化。
7.含有纯虚函数的类称为。
8.若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为和。
9.定义内联函数所用的关键字为,定义友元所用的关键字为。
10.使用成员函数重载运算符时,若运算符是二元的,则参数表中有个操作数,此时作为此运算符的左操作数。
1.D2.D3.C4.D5.D6.B7.C8.D9.A10.B
1.:
二义性2.公有3.类函数4.private
5.template<
classT>
TDBL(Tn){returnn+n;
}6.类外7.抽象类
8.aQueue.show()Queue:
show()9.inlinefriend10.1当前对象
1.下面有关重载函数的说法中正确的是()
A.重载函数必须具有不同的返回值类型;
B.重载函数形参个数必须不同;
C.重载函数必须有不同的形参列表 D.重载函数名可以不同;
2.使用string类建立对象的不正确方式是()。
A.stringstr(“OK”);
B.stringstr=”OK”;
C.stringstr;
D.stringstr=’OK’;
3.面关于C++中类的继承与派生的说法错误的是()
C.私有派生时,基类的所有成员访问权限在派生类中保持不变
D.继承可以分为单一继承与多重继承
4.面向对象程序设计将数据与()放在一起,做为一个相互依存、不可分割的整体来处理。
A.对数据的操作B.信息C.数据隐藏D.数据抽象
5.一个类的析构函数。
A.唯一的B.允许重载C.至多可有两个D.只能是缺省的
6.下列各类函数中,()不是类的成员函数。
7.在下面选项中,对类的拷贝构造函数的声明形式是()
A.A:
8.下面关于静态成员描述正确的是()
A.静态成员是对象的数据成员B.静态成员是对象的成员C.静态成员是对象的成员函数D.静态成员不是对象的成员
9.下面关于关于成员函数特征的描述中,错误的是()
A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的
10.下面叙述正确的是()
A.基类的保护成员在派生类中仍然是保护的B.基类的公有成员在派生类中仍然是公有的
C.基类的私有成员在派生类中是私有的D.从基类派生时,可以有3种派生方法
1.C2.D3.C4.A5.A
6.C7.B8.B9.A10.D
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]静态成员函数中不能引用非静态成员数据成员(或去掉