面向对象程序设计期末综合练习二(填空题)
填空题
1.以面向对象方法构造的系统,其基本单位是____对象_____。
2.每个对象都是所属类的一个____实例______。
3.对象将其大部分实现细节隐藏起来,这种机制称为___封装_______。
4.基类和派生类的关系称为____继承______。
5.复杂对象可以由简单对象构成,这种现象称为_______聚合___。
6.对象是对问题域中客观事物的_抽象_,它是一组属性和在这些属性上操作的_封装体
______。
7.特殊类的对象拥有其一般类的全部属性与操作,称特殊类____继承____了一般类。
8.如果一个派生类的基类不止一个,则这种继承称为_____多继承_______。
9.如果一个派生类只有一个唯一的基类,则这样的继承关系称为____单继承______。
10.C++支持两种多态性:____编译_____时的多态性和_____运行_____时的多态性。
11.在C++中,编译时的多态性是通过_____重载_____实现的,而运行时的多态性则是通过
______虚函数____实现的。
12.面向对象软件开发的生命周期分为三个阶段,即分析、____设计__和___实现____。
13.面向对象的分析包括_____问题域_____分析和____应用__分析两步。
14.类定义中,既包含数据成员,也包含____函数____成员。
15.类中的数据成员的访问属性通常被指明为___private_____。
16.类中的供外部调用定义的函数成员,其访问属性通常被定义为_____public___。
17.对于类中定义的任何成员,其隐含访问权限为____ private_____。
18.对于结构中定义的任何成员,其隐含访问权限为_____ public____。
19.为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义
为___ private______。
20.若在类的定义体中给出了一个成员函数的完整定义,则该函数属于___内联_____函数。
21.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前
必须加上_类名_______和两个冒号分隔符。
22.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前
必须加上类名和两个__冒号______分隔符。
23.若要把类外定义的成员函数规定为内联函数,则必须把__inline______关键字放到函数原
型或函数头的前面。
24.把一个类的定义体和所有成员函数的定义体所构成的程序范围叫做该类的____作用域__。
25.假定AA是一个类,“AA* abc();”是该类中一个成员函数的原型,则在类外定义时的函数
头为____ AA*AA:: abc()______________。
26.成员函数的参数表在类作用域中,成员函数的返回值类型_____*this___类作用域中。
27.为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函
数头的后面加上___const_____关键字。
28.若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加
上__const______关键字。
29.若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的___*this_____就代表了
类外的x对象。
30.若采用p->abc(y)表达式调用一个成员函数,在成员函数中使用的____this____就代表了
类外的p指针。
31.内联函数的定义模块与__类定义______模块必须放在同一个文件中。
32.假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,在该函数体中(能
够/不能够)_____不能够_____向*this或其成员赋值。
33.在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个指
明______队列长度______。
34.在一个用数组实现的队列类中,包含有两个数据成员,一个指明队列长度,另一个指明____
队首______元素的位置。
35.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为
length,则插入一个新元素的位置为__(first+length)%MS________。
36.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为
length,则删除一个元素后队首的位置为_____(first+1)%MS______。
37.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为
length,则队列为空的条件为__length=0___。
38.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为
length,则队列为满的条件为_ length=MS_________。
39.当一个队列为空时,不能对其做__删除______元素的操作。
40.当一个队列为满时,不能对其做___插入_____元素的操作。
41.从一个队列中删除元素就是删除___队首_____位置上的元素。
42.向一个队列中插入元素就是把该元素放到__队尾______元素的后一位置上。
43.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用
next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,elemhead->next_____________指向队首结点的后继(即下一个)结点。
44.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用
next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,新插入结点的地址应当赋给__elemtail_________所指结点的next域。
45.在一个用链表实现的队列类中,队尾结点的指针域的值为___null_____。
46.在一个用链表实现的队列类中,若链队中只含有一个结点,则队首指针的值与队尾指针的
值__相同______。
47.在一个用链表实现的队列类中,若链队为空或只含有一个结点,则队首指针的值与队尾指
针的值__相同______。
48.在一个用链表实现的队列类中,若队首指针与队尾指针的值不同,则说明链队中至少包含
有____2____个结点。
49.一个类的___构造_______函数实现对该类对象的初始化功能。
50.一个类的__析构________函数通常用于实现释放该类对象中指针成员所指向的动态存储
空间的任务。
51.当用户为一个类定义有____构造函数________时,则系统不会为该类再自动生成一个默认
构造函数。
52.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为
___AB(){}_______。
53.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为
_____~__AB(){}_____。
54.定义类动态对象数组时,其元素只能靠自动调用该类的__无参构造函数__来进行初始化。
55.在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象
时,能够避免这两个对象的同一指针同时指向同一块___动态存储空间_______________。
56.为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义_____析构函数_。
57.假定 AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类构造函数的次数为
__10______。
58.假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为
____N____。
59.对类中对象成员的初始化是通过在构造函数中给出的_____初始化表_________来实现的。
60.对类中常量成员的初始化是通过在构造函数中给出的_____初始化表_________来实现的。
61.对类中引用成员的初始化只能通过在构造函数中给出的____初始化表__________来实现。
62.对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通
过构造函数中的___函数体_________来实现。
63.假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句为const int aa
____________。
64.假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为
_____int&aa_______。
65.假定AB类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数aa对其进
行初始化,则该类的构造函数的定义为__AB(int aa):a(aa){}__________________。
66.假定AB类中只包含一个整型数据成员a,并且它是一个引用成员,若利用引用参数aa对
其进行初始化,则该类的构造函数的定义为__AB(int& aa):a(aa){}___________________。
67.假定指针p指向一个动态分配的类对象,则当执行“delete p;”语句时,在释放p所指
向的动态存储空间之前将自动调用该类的___析构函数_________。
68.假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,则系统(会/不会)__不
会_______为该类自动定义一个无参构造函数"AB() {}"。
69.假定用户为类AB定义了一个构造函数“AB(int aa, char *bb=NULL):a(aa),b(bb){}”,
则该类中至少包含有____2______个数据成员。
70.假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,该构造函数实现对数据成
员___a______的初始化。
71.假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa){}”,则定义该类的对象时,
可以有____2____种不同的定义格式。
72.假定用户为类AB定义了一个构造函数“AB(int aa):a(aa){}”,则定义该类的对象时,有
__1______种定义格式。
73.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则定
义该类的对象时,其实参表中至多带有___2______个实参。
74.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则定
义该类的对象时,其实参表中至少带有____1_____个实参。
75.假定用户为类AB定义了一个构造函数“AB(int aa=0, int bb=0) {a=aa; b=bb;}”,则定
义该类的对象时,可以有____3____种不同的定义格式。
76.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义
语句“AB x();”是_错误________(正确/错误)的。
77.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义
语句“AB x;”是__正确_______(正确/错误)的。
78.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义
语句“AB x(5);”是_____错误___(正确/错误)的。
79.假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类__拷贝构造函数_的原型语
句。
80.假定AB为一个类,则该类的拷贝构造函数的函数头为__AB(AB&)___________。
81.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函
数中应该包含有一条__DELETE PA____________语句。
82.
83.静态成员函数只能 ____访问类的静态数据成员, __不能访问类的非静态数据成员。
84.静态数据成员必须在所有函数的定义体外进行_初始化_________。
85.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上
__类域________的限定。
86.重载运算符时,该运算符的__优先级________、结合性以及操作符的个数不允许改变。
87.一个单目运算符作为类的成员函数重载时有___0_____个参数;如果作为独立函数重载,
则有___1_____个参数。
88.一个双单目运算符作为类的成员函数重载时有__1______个参数;如果作为独立函数重载,
则有___2_____个参数。
89.除了___赋值_______运算符外,其他重载的运算符都可以被派生类继承。
90.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有__2______
个操作数。
91.在重载一个单目运算符时,参数表中没有参数,说明该运算符函数只能是类的_成员函数
____________。
92.重载插入运算符<<时,其运算符函数的返回值类型应当是___ostream &_________。
93.重载抽取运算符>>时,其运算符函数的返回值类型应当是____istream &________。
94.重载插入运算符<<或抽取运算符>>时,其运算符函数的参数有_____2___个。
95.重载插入运算符<<或抽取运算符>>时,其运算符函数不能被定义为类的____成员_函数。
96.类型转换函数没有___返回值_________类型,而且参数表为_____空_______。
97.在一个或若干个类的基础上构造一个新类,被称为____继承_______。
98.派生类的成员函数可以直接访问基类的公有和保护成员,不能直接访问基类的
___私有___成员。
99.当保护继承时,基类的公有和保护成员在派生类中成为保护成员,派生类
对象不能直接访问基类的任何 ____成员。
100.在定义一个派生类时,使用___private_______关键字或者不显式地使用它则表示为___私有_______继承。
101.若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上___类名___和类区分符。
102.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以___虚基类_________的方式直接继承它。
103.引进虚基类的根本目的是为了消除_____二义性_______。
104.在每个成员函数中,隐含的第一个参数的参数名为___this_____。