复习题1Word格式文档下载.docx
《复习题1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《复习题1Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
D.派生类的对象的地址可以赋给指向基类的指针
8.下列关于虚基类的描述,错误的是(B)P266
A.设置虚基类的目的是为了消除二义性
B.虚基类的构造函数在非虚基类之后调用。
虚基类在非虚基类之前调用
C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用
D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
9.下列关于多态性的描述,错误的是(C)
A.C++语言的多态性分为编译时的多态性和运行时的多态性
B.编译时的多态性可通过函数重载实现
C.运行时的多态性可通过模板和虚函数实现.主要通过虚函数实现,没有模板
D.实现运行时多态性的机制称为动态绑定
10.下列运算符中,在C++语言中不能重载的是(C)
A.++B.>
=C.:
:
D./
11.下面关于类和对象的描述中,错误的是(A)
A.类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B.类和对象之间的关系是抽象和具体的关系
C.对象是类的实例,一个对象必须属于一个已知的类
D.类是具有共同行为的若干对象的统一描述体
在C++语言中,类和结构体有本质区别,类中包含数据及操作函数,而结构体只包含有数据。
12.下面关于数组的描述错误的是(D)
A.在C++语言中数组的名字就是指向该数组第一个元素的指针
B.长度为n的数组,下标的范围是0~n-l
C.数组的大小必须在编译时确定
D.数组只能通过值参数和引用参数两种方式传递给函数
13.下面程序错误的语句是(B)
①#include<
②usingnamespacestd;
③voidmain()
{
④int*p=newint[1];
⑤p=9;
⑥cout<
*p<
⑦delete[]p;
}
A.④B.⑤C.⑥D.⑦
14.下面的哪个选项不能作为函数的返回类型?
(C)
A.voidB.intC.newD.long
new是C++里面的一个操作符。
是用于动态创建堆对象。
并非是某种类型的标示符。
而函数返回值要么是系统原有的类型,例如int,float等,要么就是用户自己创建的类。
15.下面关于虚函数的描述,错误的是(B)
A.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C.虚函数可以是另一个类的友元函数,但不能是静态成员函数
D.基类中说明的纯虚函数在其任何派生类中都必须实现基类中说明的虚函数,在派生类中自然就是虚函数,对于纯虚函数必须在后面继承的派生类中给出具体的实现;
静态成员函数不能进行动态联编,所以虚函数不能是静态的。
16.下面程序的运行结果是(C)
#include<
{intnum=1;
int&
ref=num;
ref=ref+2;
cout<
num;
num=num+3;
cout<
ref<
}
A.13B.16C.36D.33
17?
.下面关于C++语言的描述错误的是(B)
A.C++语言支持数据封装B.C++语言中引入友元没有破坏封装性
C.C++语言允许函数名和运算符重载D.C++语言支持动态联编
18.下列程序的运行结果为(B)
{inta=2;
intb=a+1;
cout<
a/b<
A.0.66667B.0C.0.7D.0.66666666…
19.下面程序的运行结果为(D)
#include<
{chara='
3'
;
switch(a)
{case'
:
cout<
"
3"
case'
2'
2"
break;
default:
1"
}}
A.3B.321C.31D.32
20.存在定义inta[10],x,*pa;
,若pa=&
a[0],下列的哪个选项和其他3个选项不是等价的?
(A)
A.x=*pa;
B.x=*(a+1);
C.x=*(pa+1);
D.x=a[1];
21.类的析构函数是在什么时候调用的?
(C)
A.类创建时B.创建对象时C.删除对象时D.不自动调用
析构函数可以被函数调用,也可以系统调用:
函数体内的对象在函数结束时调用析构函数和使用delete释放对象所占有用的资源。
22.通常复制构造函数的参数是(C)
A.某个对象名B.某个对象的成员名
C.某个对象的引用名D.某个对象的指针名
23.在C++语言类体系中,不能被派生类继承的有(B)
A.转换函数B.构造函数C.虚函数D.静态成员函数
派生类对象的数据结构是由基类中说明的数据成员和派生类中说明的数据成员共同构成,所以不能继承基类的构造函数,必须重新定义。
24.对于类定义,下面正确的叙述是(C)
classA{public:
virtualvoidfuncl(){}
voidfunc2(){}};
classB:
publicA
{public:
voidfuncl(){cout<
”classBfunc1”<
endl;
virtualvoidfunc2(){cout<
”classBfunc2”<
}};
A.A:
func2()和B:
funcl()都是虚函数。
错
B.A:
funcl()都不是虚函数。
错
C.B:
funcl()是虚函数,而A:
func2()不是虚函数
D.B:
funcl()不是虚函数,而A:
fune2()是虚函数。
25.关键字(C)说明对象或变量初始化后不会被修改。
A.staticB.publicC.constD.inline
26、下列关于C++函数的叙述中,正确的是(C)。
A)每个函数至少要具有一个参数B)每个函数都必须返回一个值
C)函数在被调用之前必须先声明D)函数不能自己调用自己
一个函数可以没有形参,也可以为void空函数,但是函数调用前必须在主调函数中声明,函数可以递归调用自己。
27、下列关于类和对象的叙述中,错误的是(A)。
A)一个类只能有一个对象B)对象是类的具体实例
C)类是对某一类对象的抽象D)类和对象的关系是一种数据类型与变量的关系
28、在C++中,用于实现运行时多态性的是(D)。
A)内联函数B)重载函数C)模板函数D)虚函数
29、下列关于运算符重载的叙述中,正确的是(B)。
A)通过运算符重载,可以定义新的运算符B)有的运算符只能作为成员函数重载
C)若重载运算符+,则相应的运算符函数名是+D)重载二元运算符时,必须声明两个形参
本题考核运算符重载的概念。
C++中,=、[]、(
)、->以及所有的类型转换符只能作为成员函数重载。
所以B选项的描述是正确的。
运算符重载就是赋予已有的运算符多重含义,并不是定义新的运算符;
C++把重载的运算符视为特殊的函数,称为运算符函数,函数名就是在运算符前加上保留字operator;
+"
是一个二元运算符,但是作为成员函数重载时参数表中只有一个形参,对应第二个操作数,而第一个操作数就是对象本身。
30、对于语句cout<
x<
错误的是描述是(D)。
A)“cout”是一个输出流对象B)“endl”的作用是输出回车换行
C)“x”是一个变量D)“<
”称作提取运算符。
叫插入运算符
31、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是(B)。
classMyBASE
{private:
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;
}};
A)4B)3C)2D)1
32、已知在一个类体中包含如下函数原型:
Volumeoperator-(Volume)const;
,下列关于这个函数的叙述中,错误的是(B)。
A)这是运算符-的重载运算符函数 B)这个函数所重载的运算符是一个一元运算符
C)这是一个成员函数 D)这个函数不改变类的任何数据成员的值
33、执行如下的程序段后,输出结果是(A)。
cout.fill('
*'
);
cout.width(6);
#'
cout<
123<
endl;
A)###123B)123###C)***123D)123***
34、在下列函数原型中,可以作为类AA构造函数的是(D)。
A)voidAA(int);
B)intAA();
C)AA(int)const;
D)AA(int);
35、下面四个选项中,(A)是用来声明虚函数的。
A)virtualB)publicC)includeD)usingnamespace
36、实现运行时的多态性要使用(D)。
A)重载函数B)构造函数C)析构函数D)虚函数
37、要实现动态联编,必须通过(A)调用虚函数。
A)对象指针B)成员名限定C)对象名D)派生类名
38、以下(C)成员函数表示纯虚函数。
A)virtualintvf(int);
B)voidvf(int)=0;
C)virtualvoidvf()=0;
D)virtualvoidvf(int){}
39、有如下类声明:
classXA
intx;
public:
XA(intn){x=n;
classXB:
publicXA
{private:
inty;
XB(inta,intb);
};
在构造函数XB的下列定义中,正确的是(B)。
A)XB:
XB(inta,intb):
x(a),y(b){}B)XB:
XA(a),y(b){}
C)XB:
x(a),XB(b){}D)XB:
XA(a),XB(b){}
40、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
则operator+有个参数,operator*有参数。
A)2、2B)2、1C)1、2D)1、1
41、应在下列程序划线处填入的正确语句是(C)。
classBase
{public:
voidfun(){cout<
Base:
fun"
}};
classDerived:
publicBase
{voidfun()
{//显式调用基类的函数fun()
cout<
Derived:
}};
A)fun();
B)Base.fun();
C)Base:
fun();
D)Base->
42.下列哪个是C++语言的有效标识符?
(A)
A._N01B.No.1C.12345D.int
43.下面程序的运行结果为(C)
voidmain()
{for(inta=0,x=0;
!
x&
&
a<
=10;
a++)
{a++;
a<
A.10B.11C.12D.0
44.下列程序的输出结果为(B)
{char*a[]={"
hello"
"
the"
world"
};
char**pa=a;
pa++;
cout<
*pa<
A.helloB.theC.worldD.hellotheworld
45.决定C++语言中函数的返回值类型的是(D)
A.return语句中的表达式类型
B.调用该函数时系统随机产生的类型
C.调用该函数时的主调用函数类型
D.在定义该函数时所指定的数据类型
46.类的析构函数的作用是(D)
A.一般成员函数的初始化B.类的初始化
C.对象的初始化D.对象生存器结束时作些清理工作
47.下列说法正确的是(B)
A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义
D.类的内联函数必须在类体外通过加关键字inline定义
48.下列程序的输出结果为(D)
intfunc(intn)
{if(n<
1)return1;
elsereturnn+func(n-1);
return0;
voidmain()
{cout<
func(5)<
A.0B.10C.15D.16
49.在C++语言中,数据封装要解决的问题是(D)
A.数据的规范化B.便于数据转换
C.避免数据丢失D.防止不同模块之间数据的非法访问
50.对类的构造函数和析构函数描述正确的是(A)
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
51.下面对静态数据成员的描述中,正确的是(A)
A.静态数据成员是类的所有对象共享的数据
B.类的每个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员值
D.静态数据成员不能通过类的对象调用
52.如果类A被说明成类B的友元,则(D)
A.类A的成员即类B的成员
B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员
D.类B不一定是类A的友元
53.下面程序的运行结果为(D)
voidswap(int&
a,intb)
{inttemp;
temp=a++;
a=b;
b=temp;
{inta=2,b=3;
swap(a,b);
a<
"
,"
b<
A.2,3B.3,2C.2,2D.3,3
54.下面关于C++语言变量的叙述错误的是(B)
A.在C++语言中变量分为auto,static,extern和register四种存储类型
B.自动变量和外部变量的作用域为整个程序
C.内部静态变量的作用域是定义它的函数
D.外部静态变量的作用域是定义它的文件
55.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为(A)
A.publicB.protectedC.privateD.static
56.在C++语言程序中,对象之间的相互通信通过(C)
A.继承实现B.调用成员函数实现
C.封装实现D.函数重载实现
57.下面程序的运行结果是(C)
{inti=1;
while(i<
=8)
if(++i%3!
=2)continue;
elsecout<
i;
A.25B.36C.258D.369
58.已知有定义,则下列选项错误的是(B)
constintD=5;
inti=1;
doublef=0.32;
charc=15;
A.++i;
B.D--;
C.c++;
D.--f
59.设有数组定义:
chararray[]=”China”;
,则数组array所占的空间为(C)
A.4个字节B.5个字节C.6个字节D.7个字节
60.下列描述中哪个是正确的?
(B)
A.私有派生的子类无法访问父类的成员
B.类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的
C.私有派生类不能作为基类派生子类
D.私有派生类的所有子孙类将无法继续继承该类的成员
61.下列关于构造函数说法不正确的是(C)
A.构造函数必须与类同名
B.构造函数可以省略不写
C.构造函数必须有返回值
D.在构造函数中可以对类中的成员进行初始化
62.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是(D)
A.一元运算符B.二元运算符
C.选项A)和选项B)都可能D.重载错误
63.可以用P.a的形式访问派生类对象P的基类成员a,其中a是(D)
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
64.成员函数可声明为静态的,条件是它不访问(C)类成员。
A.静态B.常数C.非静态D.公共
65.要让一个类中的所有对象具有共同的数据,请使用(C)。
A.常数成员变量B.私有数据成员
C.静态数据成员D.以上都是
二、填空题
1.继承的方式有公有继承、_私有继承____和____保护继承____3种。
2.重载的运算符保持其原有的____操作数个数_________、优先级和结合性不变。
3.在C++中封装性、继承性和_____多态性________是面向对象思想的主要特征。
4.假定A为一个类,则语句A(A&
p);
为该类____复制构造____函数的原型说明。
5、面向对象程序设计有四个主要特点,即抽象、封装、__继承__和_多态性___。
6、非成员函数应声明为类的_友元___函数才能访问这个类的private成员。
7、派生类中的成员不能直接访问基类中的__私有__成员。
8、在用class定义一个类时,数据成员和成员函数的默认访问权限是_private或私有___。
9、运算符重载函数可能是类的_成员___函数,也可以是类的_友元_函数,还可以是普通函数。
10、用流对象的成员函数控制输出格式时,用于设置字段宽度的流成员函数的名称是width____,与之作用相同的控制符名称是__setw__。
11、含有纯虚函数的类称为__抽象类__。
12.在面向对象的程序设计中,类描述的是具有相似性质的一组__对象____。
13.在面向对象方法中,类之间共享属性和操作的机制称为____继承_________。
14.通过使用new和delete两个运算符进行的分配为__动态存储__________分配。
15.C++语言支持的两种多态性分别是_____编译时________的多态性和______运行时_______的多态性。
三、程序阅读题
1.阅读下面的程序,试求:
(1)给出程序的运行结果。
(2)分析变量i的作用。
#include<
iostre