155. 对象将其大部分实现细节隐藏起来,这种机制称为__________。 156. 基类和派生类的关系称为__________。
157. 复杂对象可以由简单对象构成,这种现象称为__________。
158. 对象是对问题域中客观事物的________,它是一组属性和在这些属性上操作的__________。
159. 特殊类的对象拥有其一般类的全部属性与操作,称特殊类________了一般类。 160. 如果一个派生类的基类不止一个,则这种继承称为____________。
161. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。 162. C++支持两种多态性:_________时的多态性和__________时的多态性。
163. 在C++中,编译时的多态性是通过__________实现的,而运行时的多态性则是通过__________实现的。
164. 面向对象软件开发的生命周期分为三个阶段,即分析、__________和__________。 165. 面向对象的分析包括__________分析和__________分析两步。 166. 类定义中,既包含数据成员,也包含________成员。 167. 类中的数据成员的访问属性通常被指明为________。
168. 类中的供外部调用定义的函数成员,其访问属性通常被定义为________。 169. 对于类中定义的任何成员,其隐含访问权限为________。 170. 对于结构中定义的任何成员,其隐含访问权限为________。 171. 为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为________。
172. 若在类的定义体中给出了一个成员函数的完整定义,则该函数属于________函数。
173. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上________和两个冒号分隔符。
174. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个________分隔符。
175. 若要把类外定义的成员函数规定为内联函数,则必须把________关键字放到函数原型或函数头的前面。
176. 把一个类的定义体和所有成员函数的定义体所构成的程序范围叫做该类的____________。
177. 假定AA是一个类,“AA* abc();”是该类中一个成员函数的原型,则在类外定义时的函数头为__________________。
178. 成员函数的参数表在类作用域中,成员函数的返回值类型________类作用域中。 179. 为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上________关键字。
180. 若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上________关键字。
181. 若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的x对象。
182. 若采用p->abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的p指针。
183. 内联函数的定义模块与________模块必须放在同一个文件中。
184.假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,在该函数体中(能够/不能够)__________向*this或其成员赋值。
185.在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个指明____________。
186. 在一个用数组实现的队列类中,包含有两个数据成员,一个指明队列长度,另一个指明__________元素的位置。
187. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则插入一个新元素的位置为__________。
188. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则删除一个元素后队首的位置为__________。
189. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队列为空的条件为__________。
190. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队列为满的条件为__________。
191. 当一个队列为空时,不能对其做________元素的操作。 192. 当一个队列为满时,不能对其做________元素的操作。 193.从一个队列中删除元素就是删除________位置上的元素。
194.向一个队列中插入元素就是把该元素放到________元素的后一位置上。
195.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,_____________指向队首结点的后继(即下一个)结点。
196. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,新插入结点的地址应当赋给___________所指结点的next域。
197. 在一个用链表实现的队列类中,队尾结点的指针域的值为________。 198. 在一个用链表实现的队列类中,若链队中只含有一个结点,则队首指针的值与队尾指针的值________。
199. 在一个用链表实现的队列类中,若链队为空或只含有一个结点,则队首指针的值与队尾指针的值________。
200. 在一个用链表实现的队列类中,若队首指针与队尾指针的值不同,则说明链队中至少包含有________个结点。
201.一个类的__________函数实现对该类对象的初始化功能。
202.一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。
203.当用户为一个类定义有____________时,则系统不会为该类再自动生成一个默认构造函数。
204.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为__________。
205.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为__________。
206.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。
207.在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块__________________。
208.为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义____________。
209. 假定 AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类构造函数的次数为________。
210.假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为________。
211.对类中对象成员的初始化是通过在构造函数中给出的______________来实现的。 212.对类中常量成员的初始化是通过在构造函数中给出的______________来实现的。 213.对类中引用成员的初始化只能通过在构造函数中给出的______________来实现。 214.对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,
也可以通过构造函数中的____________来实现。
215. 假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句为____________。
216. 假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为____________。
217. 假定AB类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数aa对其进行初始化,则该类的构造函数的定义为____________________。
218. 假定AB类中只包含一个整型数据成员a,并且它是一个引用成员,若利用引用参数aa对其进行初始化,则该类的构造函数的定义为____________________。
219.假定指针p指向一个动态分配的类对象,则当执行“delete p;”语句时,在释放p所指向的动态存储空间之前将自动调用该类的____________。
220.假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,则系统(会/不会)_________为该类自动定义一个无参构造函数\{}\。
221. 假定用户为类AB定义了一个构造函数“AB(int aa, char *bb=NULL):a(aa),b(bb){}”,则该类中至少包含有__________个数据成员。
222.假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,该构造函数实现对数据成员_________的初始化。
223.假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa){}”,则定义该类的对象时,可以有________种不同的定义格式。
224.假定用户为类AB定义了一个构造函数“AB(int aa):a(aa){}”,则定义该类的对象时,有________种定义格式。
225.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则定义该类的对象时,其实参表中至多带有_________个实参。
226.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则定义该类的对象时,其实参表中至少带有_________个实参。
227.假定用户为类AB定义了一个构造函数“AB(int aa=0, int bb=0) {a=aa; b=bb;}”,则定义该类的对象时,可以有________种不同的定义格式。
228.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义语句“AB x();”是_________(正确/错误)的。
229.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义语句“AB x;”是_________(正确/错误)的。
230.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义语句“AB x(5);”是_________(正确/错误)的。
231.假定AB为一个类,则类定义体中的“AB(AB x);”语句为该类______________的原型语句。
232.假定AB为一个类,则该类的拷贝构造函数的函数头为_____________。
233.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条______________语句。
234. 静态成员函数____访问类的静态数据成员, ____访问类的非静态数据成员。 235. 静态数据成员必须在所有函数的定义体外进行__________。 236. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上__________的限定。
237. 重载运算符时,该运算符的__________、结合性以及操作符的个数不允许改变。 238. 一个单目运算符作为类的成员函数重载时有________个参数;如果作为独立函数
重载,则有________个参数。
239. 一个双单目运算符作为类的成员函数重载时有________个参数;如果作为独立函数重载,则有________个参数。
240. 除了__________运算符外,其他重载的运算符都可以被派生类继承。 241. 作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有________个操作数。
242. 在重载一个单目运算符时,参数表中没有参数,说明该运算符函数只能是类的_____________。
243. 重载插入运算符<<时,其运算符函数的返回值类型应当是____________。 244. 重载抽取运算符>>时,其运算符函数的返回值类型应当是____________。 245. 重载插入运算符<<或抽取运算符>>时,其运算符函数的参数有________个。 246. 重载插入运算符<<或抽取运算符>>时,其运算符函数不能被定义为类的________函数。
247. 类型转换函数没有____________类型,而且参数表为____________。 248. 在一个或若干个类的基础上构造一个新类,被称为___________。
249. 派生类的成员函数可以直接访问基类的__________成员,不能直接访问基类的 ______成员。
250. 当保护继承时,基类的__________成员在派生类中成为保护成员,派生类对象不能直接访问基类的__________成员。
251. 在定义一个派生类时,使用__________关键字或者不显式地使用它则表示为__________继承。
252. 若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上______和类区分符。
253. 若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。
254. 引进虚基类的根本目的是为了消除____________。
255. 在每个成员函数中,隐含的第一个参数的参数名为________。
四、程序填充
1. 斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5个数。
#include
int f,f1,f2,i;
cout<<” 斐波那契数列:\\n”; f1=0; f2=1;
cout< cout< if(_____(2)______) cout< f2=____(3)_______; } cout< (1) (2) (3) 2. 计算?(?1)i?110i?1xi的值。 i! #include double x,p1=1,p2=1,s=0; int i,j=1; cout<<\输入x的值:\ cin>>x; for(i=1;i<=10;i++) { p1*=___(1)_____; p2*=____(2)____; i+1 s+=j*p1/p2; //j的值为(-1) j=____(3)____; } cout< (1) (2) (3) 3. 打印出2至99之间的所有素数(即不能被任何数整除的数)。 #include int i,n; for(n=2; ___(1)___; n++) { int temp=int(sqrt(n)); //求出n的平方根并取整 for(i=2; ___(2)___; i++) if(n%i==0) ___(3)___; if(i>temp) cout< cout<<'\\n'; } (1) (2) (3) 4. 采用辗转相除法求出两个整数的最大公约数。 #include int a,b; cout<<\请输入两个正整数:\ cin>>a>>b; while(a<=0 || __(1)___) {cout<<\重新输入:\