C++自测题之三.docx
- 文档编号:26233926
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:25
- 大小:23.98KB
C++自测题之三.docx
《C++自测题之三.docx》由会员分享,可在线阅读,更多相关《C++自测题之三.docx(25页珍藏版)》请在冰豆网上搜索。
C++自测题之三
一选择题
1、面向对象程序设计中的数据隐藏指的是(D)。
A.输入数据必须输入口令B.数据经过加密处理
C.对象部数据结构上建有防火墙D.对象部数据结构的不可访问性
2、以下关于类的访问权限的描述中,错误的选项是(D).。
A.说明为公有的成员可以被程序中的任何代码访问
B.说明为私有的成员只能被类的成员和说明为友元类的成员函数访问
C.说明为保护的成员,除了能被本身的成员函数和说明为友元类的成员函数访问外,该类的派生类的成员也可以访问
D.类的所有成员都可以被程序中的任何代码访问
3、C中对于类中定义的成员,其默认的访问权限为(C)。
A.PublicB.ProtectedC.PrivatD.Static
4、C++对C语言作了很多改良,即从面向过程变成为面向对象的主要改良是(D)
A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数
C.规定函数说明符必须用原型D.引进了类和对象的概念
5、类A中的一个成员函数的说明如下:
voidSet(A&a);那么该函数的参数“A&a〞的含义是(C)。
A.指向A的指针为aB.将变量a的地址赋给类A
C.类A对象引用a用作函数的形参D.变量A与a按位与后作函数参数
6、以下特性中,C与C++共有的是(D)。
A.继承B.封装C.多态性D.函数定义不能嵌套
7、关于封装,以下说法中不正确的选项是〔D〕。
A.通过封装,对象的全部属性和操作结合在一起,形成一个整体
B.通过封装,一个对象的实现细节被尽可能地隐藏起来〔不可见〕
C.通过封装,每个对象都成为相对独立的实体
D.通过封装,对象的属性都是不可见的
8、在一个类的定义中,包含有〔C〕成员的定义。
A.数据B.函数C.数据和函数D.数据或函数
9、在类作用域中能够通过直接使用该类的〔D〕成员名进展访问。
A.私有B.公用C.保护D.任何
10、在关键字public后面定义的成员为类的〔B〕成员。
A.私有B.公用C.保护D.任何
11、在关键字private后面定义的成员为类的〔A〕成员。
A.私有B.公用C.保护D.任何
12、假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,那么访问x对象中数据成员a的格式为〔D〕。
A.x(a)B.x[a]C.x->aD.X.a
13、假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,那么访问x对象中函数成员a()的格式为〔B〕。
A.x.aB.x.a()C.x->aD.x->a()
14、假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,那么访问px所指对象中数据成员a的格式为〔C〕。
A.px(a)B.px[a]C.px->aD.Px.a
15、假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,那么访问x对象中数据成员a的格式为〔D〕。
A.x.aB.x.a()C.x->GetValue()D.x.GetValue()
16、假定AA为一个类,inta()为该类的一个成员函数,假设该成员函数在类定义体外定义,那么函数头为〔A〕。
A.intAA:
:
a()B.intAA:
a()C.AA:
:
a()D.AA:
:
inta()
15、假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,那么访问x对象中数据成员a的格式为〔D〕。
A.x.aB.x.a()C.x->GetValue()D.x.GetValue()
16、假定AA为一个类,inta()为该类的一个成员函数,假设该成员函数在类定义体外定义,那么函数头为〔A〕。
A.intAA:
:
a()B.intAA:
a()C.AA:
:
a()D.AA:
:
inta()
17、假定AA为一个类,a为该类公有的数据成员,假设要在该类的一个成员函数中访问它,那么书写格式为〔A〕。
A.aB.AA:
:
aC.a()D.AA:
:
a()
18、在多文件结构的程序中,通常把类的定义单独存放于〔D〕中。
A.主文件B.实现文件C.库文件D.头文件
19、假定AA是一个类,abc是该类的一个成员函数,那么参数表中隐含的第一个参数为〔C〕。
A.abcB.*thisC.thisD.this&
20、类中定义的成员默认为〔B〕访问属性。
A.publicB.privateC.protectedD.Friend
21、结构中定义的成员默认为〔A〕访问属性。
A.publicB.privateC.protectedD.Friend
22、对于一个类的构造函数,其函数名与类名(A)。
A.完全一样B.根本一样C.不一样D.无关系
23、对于一个类的析构函数,其函数名与类名(C)。
A.完全一样B.完全不同C.只相差一个字符D.无关系
24、类的构造函数是在定义该类的一个(C)时被自动调用执行的。
A.成员函数B.数据成员C.对象D.友元函数
25、类的析构函数是一个对象被(B)时自动调用的。
A.建立B.撤消C.赋值D.引用
26、一个类的构造函数通常被定义为该类的(A)成员。
A.公用B.保护C.私有D.友元
27、假定AB为一个类,那么执行“ABx;〞语句时将自动调用该类的(B)。
A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数
28、假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}〞,那么执行“Ax(4,5);〞语句后,x.a和x.b的值分别为(C)。
A.4和5B.5和4C.4和20D.20和5
29、假定AB为一个类,那么(B)为该类的拷贝构造函数的原型说明。
A.AB(ABx);B.AB(AB&x);C.voidAB(AB&x);D.AB(intx);
30、假定一个类的构造函数为“B(intax,intbx):
a(ax),b(bx){}〞,执行“Bx(1,2),y(3,4);x=y;〞语句序列后x.a的值为(C)。
A.1B.2C.3D.4
31、假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为(D)。
A.AB(){a=0;}B.AB(intaa=0):
a(aa){}
C.AB(intaa):
a(aa){}D.AB(){}
32、对于任一个类,用户所能定义的构造函数的个数至多为(D)。
A.0B.1C.2D.任意个
33、对于任一个类,用户所能定义的析构函数的个数至多为(B)。
A.0B.1C.2D.任意个
34、假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的次数为(C)。
A.0B.1C.nD.n-1
35、假定AB为一个类,那么执行“ABa,b
(2),c[3],*p=&a;〞语句时共调用该类无参构造函数的次数为(A)。
A.5B.6C.3D.4
36、对类对象成员的初始化是通过构造函数中给出的(B)实现的。
A.函数体B.初始化表C.参数表D.初始化表或函数体
37、对类中常量成员的初始化是通过构造函数中给出的(C)实现的。
A.函数体B.参数表C.初始化表D.初始化表或函数体
38、对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句(划线处)应该是(C)。
classMyClass
{
public:
MyClass(intx)
{
n=x;
}
voidSetValue(intn1)
{
n=n1;
}
private:
intn;
};
intf()
{
MyClass*ptr=newMyClass(45);
__________;
}
A.MyClass(50)B.SetValue(50)C.ptr->SetValue(50)D.ptr->n=50
39、假定AB为一个类,那么执行“AB*px=newAB[n];〞语句时将(A)。
A.动态分配一个数组B.动态分配一个对象
C.静态分配一个数组D.静态分配一个对象
40、设px是指向一个类对象的指针变量,那么执行“deletepx;〞语句时,将自动调用该类的(C)。
A.无参构造函数B.带参构造函数C.析构函数D.拷贝构造函数
41、通常,拷贝构造函数的参数是(B)。
A.某个对象名B.某个对象的引用名
C.某个对象的成员名D.某个对象的指针名
42、拷贝〔复制〕构造函数的作用是〔C〕。
A.进展数据类型的转换B.用对象调用成员函数
C.用对象初始化对象D.用一般类型的数据初始化对象
43、一个类的静态数据成员所表示属性(C)。
A.是类的或对象的属性B.只是对象的属性C.只是类的属性D.类和友元的属性
44、静态成员函数对类的数据成员访问〔B〕。
A.是不允许的B.只允许是静态数据成员
C.只允许是非静态数据成员D.可允许是静态数据成员或非静态数据成员
45、静态数据成员的初始化是在〔D〕中进展的。
A.构造函数B.任何成员函数C.所属类D.全局区
46、引入友元的主要目的是为了〔C〕。
A.增强数据安全性B.提高程序的可靠性C.提高程序的效率和灵活性D.保证类的封装性
47、从一个基类派生出的各个类的对象之间(C)。
A.共享所有数据成员,每个对象还包含基类的所有属性
B.共享局部数据成员,每个对象还包含基类的所有属性
C.不共享任何数据成员,但每个对象还包含基类的所有属性
D.共享局部数据成员和函数成员
48、如果是类B在类A的根底上构造,那么,就称〔B〕。
A.类A为基类或父类,类B为超类或子类
B.类A为基类、父类或超类,类B为派生类或子类
C.类A为派生类,类B为基类
D.类A为派生类或子类,类B为基类、父类或超类
49、C++的继承性允许派生类继承基类的〔C〕。
A.局部特性,并允许增加新的特性或重定义基类的特性
B.局部特性,但不允许增加新的特性或重定义基类的特性
C.所有特性,并允许增加新的特性或重定义基类的特性
D.所有特性,但不允许增加新的特性或重定义基类的特性
50、派生类的成员函数可以直接访问基类的〔B〕成员。
A.所有B.公有和保护C.保护和私有D.私有
51、对于公有继承,基类的公有和保护成员在派生类中将(D)成员。
A.全部变成公有B.全部变成保护C.全部变成私有D.仍然相应保持为公有和保护
52、在定义一个派生类时,假设不使用保存字显式地规定采用何种继承方式,那么默认为〔A〕方式。
A.私有继承B.非私有继承C.保护继承D.公有继承
53、假设类A和类B的定义如下:
classA
{
inti,j;
public:
intgeti(){returni;}
};
classB:
publicA
{
intk;
public:
voidmake(){k=i*j;}
};
那么上述中,〔A〕是非法的表达式。
A.k=i*jB.intk;C.returni;D.voidmake();
54、在下面的表达式中,不表示虚继承的是〔C〕。
A.virtualpublicB.publicvirtualC.PublicD.Virtual
55、设置虚函数的声明中,正确的选项是〔B〕。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码
56、以下虚基类的声明中,正确的选项是〔 D〕。
A.classvirtualB:
publicAB.virtualclassB:
publicA
C.classB:
publicAvirtualD.classB:
virtualpublicA
57、下面描述中,正确的选项是〔 A〕。
A.virtual可以用来声明虚函数
B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
C.即使基类的构造函数没有参数,派生类也必须建立构造函数
D.静态数据成员可以通过成员初始化列表来初始化
58、如果一个类至少有一个纯虚函数,那么就称该类为〔 A〕。
A.抽象类B.虚函数C.派生类D.以上都不对
59、以下运算符中,〔A〕运算符在C++中不能重载。
A.?
:
B.[]C.newD.&&
60、在重载一个运算符时,其参数表中没有任何参数,这说明该运算符是〔B〕。
A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符
C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符
61、在成员函数中进展双目运算符重载时,其参数表中应带有〔B〕个参数。
A.0B.1C.2D.3
62、cout是I0流库预定义的(B)。
A.类B.对象C.包含文件D.常量
63、以下关于函数模板表达正确的选项是〔C〕。
A.函数模板也是一个具体类型的函数
B.函数模板的类型参数与函数的参数是同一个概念
C.通过使用不同的类型参数,函数模板可以生成不同类型的函数
D.用函数模板定义的函数没有类型
二填空题
1、 以面向对象方法构造的系统,其根本单位是__________。
对象
2、 每个对象都是所属类的一个__________。
实例
3、 对象将其大局部实现细节隐藏起来,这种机制称为__________。
封装
4、 类定义中,既包含数据成员,也包含________成员。
函数
6、 类中的数据成员的访问属性通常被指明为________。
private〔或私有〕
7、 类中的供外部调用定义的函数成员,其访问属性通常被定义为________。
public(或公有)
8、 对于类中定义的任何成员,其隐含访问权限为________。
private(或私有)
9、 对于结构中定义的任何成员,其隐含访问权限为________。
public(或公有)
10、 为了使类中的成员不能被类外的函数通过成员操作符访问,那么应把该成员的访问权限定义为________。
private
11、 假设在类的定义体中给出了一个成员函数的完整定义,那么该函数属于________函数。
联
12、 假设在类的定义体中只给出了一个成员函数的原型,那么在类外给出完整定义时,其函数名前必须加上________和两个冒号分隔符。
类名
13、 假设在类的定义体中只给出了一个成员函数的原型,那么在类外给出完整定义时,其函数名前必须加上类名和两个________分隔符。
冒号
14、 假设要把类外定义的成员函数规定为联函数,那么必须把________关键字放到函数原型或函数头的前面。
inline
15、 把一个类的定义体和所有成员函数的定义体所构成的程序围叫做该类的____________。
作用域
16、 假定AA是一个类,“AA* abc();〞是该类中一个成员函数的原型,那么在类外定义时的函数头为__________________。
AA* AA:
:
abc()
17、 成员函数的参数表在类作用域中,成员函数的返回值类型________类作用域中。
不在
18、 为了防止在调用成员函数时修改对象中的任何数据成员,那么应在定义该成员函数时,在函数头的后面加上________关键字。
const
19、假设只需要通过一个成员函数读取数据成员的值,而不需要修改它,那么应在函数头的后面加上________关键字。
const
20一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,
//用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素
//进展从小到大排序
voidInsertA();//采用插入排序的方法对数组a中前n个元素进展从小到大排序
voidPrintA();//依次输出数组a中的前n个元素
};
该类中MaxA()函数的实现如下,请在标号位置补充适当的容。
int____
(1)_____
{
intx=a[0];
for(inti=1;i if(a[i]>x)___ (2)___; ___(3)___; } 21、一个类的__________函数实现对该类对象的初始化功能。 构造 22、当用户为一个类定义有____________时,那么系统不会为该类再自动生成一个默认构造函数。 构造函数 23、假定用户没有给一个名为AB的类定义构造函数,那么系统为其定义的构造函数为__________。 AB() {} 24、程序填空 classA{ inta; public: A(){a=0;} ___ (1)___{}//定义构造函数,用参数aa初始化数据成员a }; main(){ ___ (2)___;//定义类A的指针对象p ___(3)__;//用p指向动态对象并初始化为整数5 } 解答: 〔1〕A(intaa): a(aa) (2)A*p(3)p=newA(5) 25、假定AB为一个类,那么类定义体中的“AB(AB x);〞语句为该类______________的原型语句。 拷贝构造函数 26、一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。 析构 27、定义类动态对象数组时,其元素只能靠自动调用该类的____________来进展初始化。 无参构造函数 28、在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,__________________。 能够防止这两个对象的同一指针同时指向同一块 29、#include #include classA{ int*a;intn;intMaxLen; public: A(): a(0),n(0),MaxLen(0){} A(int*aa,intnn,intMM){ n=nn; MaxLen=MM; if(n>MaxLen)exit (1); ___ (1)___;//由a指向长度为MaxLen的动态数组 for(inti=0;i } ~A(){delete[]a;} intGetValue(inti)___ (2)___//函数体返回a[i]的值 }; voidmain() { intb[10]={1,2,3,4,5,6,7,8,9,10}; Ar(b,10,10); inti,s=0; for(i=0;i<10;i++);___(3)___//把r对象的a数据成员中的每个 //元素值依次累加到s中 cout<<"s="< } 解答: (1)a=newint[MaxLen] (2){returna[i];}(3)s+=r.GetValue(i) 30、在下面一段类定义中,Derived类公有继承了基类Base。 需要填充的函数由注释容给出了功能。 classBase { private: intmem1,mem2;//基类的数据成员 public: Base(intm1,intm2){ mem1=m1;mem2=m2; } voidoutput(){cout< //... }; classDerived: publicBase { private: intmem3;//派生类本身的数据成员 public: //构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3 Derived(intm1,intm2,intm3); //输出mem1,mem2和mem3数据成员的值 voidoutput(){ ___ (1)___;cout< } //... }; Derived: : Derived(intm1,intm2,intm3): ___ (2)___{___(3)___;} 解答: (1)Base: : output() (2)Base(m1,m2)(3)mem3=m3 31、一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是: 其重载的运算符[]要对下标是否越界进展检查。 classARRAY{ int*v;//指向存放数组数据的空间 ints;//数组大小 public: ARRAY(inta[],intn); ~ARRAY(){delete[]v;} intsize(){returns;} int&operator[](intn); }; ___ (1)___operator[](intn)//[]的运算符成员函数定义 { if(n<0||___ (2)___){cerr<<"下标越界! ";exit (1);} return___(3)___; } 解答: (1)int&ARRAY: : (2)n>=s(3)v[n](或*(v+n)) 32、 当保护继承时,基类的__________成员在派生类中成为保护
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 自测
![提示](https://static.bdocx.com/images/bang_tan.gif)