《面向对象程序设计》第10章在线测试

《面向对象程序设计》第10章在线测试,第1张

《面向对象程序设计》第10章在线测试

剩余时间:

59:55

答题须知:1、本卷满分20分。

2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。

3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。

第一题、单项选择题(每题1分,5道题共5分)

1、throw后面的表达式不可以是(D )

A、常量B、变量

C、对象D、数组

2、关于没有被捕捉的异常正确的说法是(A/C )

A、在catch块中没有处理的异常 B、未被捕捉的异常必然导致系统崩溃

C、如果一个异常没有被捕捉到,将调用terminate()函数终止程序运行 D、忽略它

3、关于异常对象的说法正确的是( A)

A、异常对象需要先建立,再抛出 B、以传值方式传递异常对象时,抛出的是局部临时对象

C、以引用方式传递异常对象时,抛出的是局部静态对象 D、以指针方式传递异常对象时,抛出的是全局临时对象

4、关于try, throw和catch使用的说明中,错误的是(D )

A、throw必须在try块中 B、每一个try块的后面一定要跟着catch块

C、程序中catch块可以有多个D、throw抛出的异常与距它最近的cach匹配

5、为保证程序中的全局变量不与开发商提供的全局变量重名,可以采取的措施是(C )

A、查阅手册,不起同样的名字 B、引入命名空间

C、避开不用 D、让开发商改名

第二题、多项选择题(每题2分,5道题共10分)

1、下面与异常处理相关的关键字有(CD )

A、Try

B、Catch

C、try

D、catch

2、下面与异常处理相关的关键字有(BC )

A、Throw

B、throw

C、try

D、Try

3、throw 表达式中的表达式的含义(BD/ (不知道正确答案是什么))

A、表达式表示异常的值

B、表达式与return语句的运算数相似

C、表达式表示异常的类型

D、表达式的值可以用来区别不同的异常

4、catch子句的说法正确的是( AB)

A、catch子句后的复合语句是异常处理程序

B、catch子句捕获throw表达式抛出的异常

C、catch子句的异常类型说明只能是类型,不能是数值

D、catch子句的异常类型不能是自定义类

5、关于catch(…)语句的说法正确的是(AC )

A、catch(…)语句可以捕获任何异常

B、catch(…)语句可以放在catch子句的任何位置

C、catch(…)语句必须放在catch子句的最后

D、catch(…)语句捕获空的异常

第三题、判断题(每题1分,5道题共5分)

1、异常如果没有要求程序立即进行处理,将会引起程序错误甚至崩溃的现象。

正确 错误T

2、抛出异常的模块并不负责异常的处理,该异常的处理可以程序中的任何位置。

正确 错误F

3、异常信号传递方式有三种:传值方式、引用方式和指针方式。

正确 错误T

4、命名空间,就是在程序的不同的模块中使用相同的名字表示不同的事物(实体)。目的是提供一种机制,使大程序的各个部分中因出现重名而导致冲突的可能性降到最低。

正确 错误T

5、catch处理程序的出现次序无关紧要。

正确 错误F

《面向对象程序设计》第02章在线测试

第一题、单项选择题(每题1分,5道题共5分)

1、假定AB为一个类,则执行 “AB r1=r2”语句时将自动调用该类的( D)。

A、无参构造函数B、带参构造函数

C、赋值重载函数D、拷贝构造函数

2、一段程序的定义如下,在函数f()中将动态对象的成员n的值改为34的语句应该为 (C ) class A { int npublic: setn(int nl) {n=nl} A(int x) {n = x} } int f() {A * ptr = new A(45)... }

A、A.n=34 B、ptr.setn(34)

C、ptr->setn(34) D、setn(34)

3、假定AB为一个类,则执行“AB p=new AB(1,2)”语句时共调用该类构造函数的次数为(B )。

A、0 B、1

C、2 D、3

4、假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete []px”语句时共调用该类析构函数的次数为(C )。

A、0 B、1

C、n D、n+1

5、假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为( B)。

A、abc B、 this

C、this D、this&

第二题、多项选择题(每题2分,5道题共10分)

1、定义析构函数时,错误的说法是 (BD) 。

A、其名与类名完全相同

B、返回类型是 void 类型

C、无形参,也不可重载

D、函数体中必须有 delete 语句

2、假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的语句错误的是(ABC)。

A、x.a

B、x.a()

C、x->GetValue()

D、x.GetValue()

3、下面关于构造函数的说法正确的是(AB)

A、构造函数的函数名与类名相同

B、构造函数可以重载

C、构造函数不可以设置默认参数

D、构造函数必须指定类型说明

4、下面关于成员函数的说法错误的是(ACD)

A、类定义中只能说明函数成员的函数头,不能定义函数体

B、类中的函数成员可以在类体中定义,也可以在类体之外定义

C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中

D、在类体之外定义的函数成员不能 *** 作该类的私有数据成员

5、假定AB为一个类,则执行 “AB *s=new AB(a,5)”语句的结果是(BCD)

A、动态生成对象AB赋值给变量s

B、动态生成对象s

C、如果对象AB中有公有成员a,则s->a可以访问该成员

D、动态生成对象AB,该对象的地址赋值给变量s

第三题、判断题(每题1分,5道题共5分)

1、 若Sample类中的一个成员函数说明如下: Void set(Sample &a) 其中Sample &a表示的含义是.a是类Sample的对象引用,用来作函数Set()的形参。 T

正确 错误

2、 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为x->a。 F

正确 错误

3、 静态成员函数允许访问类的数据成员。T

正确 错误

4、 建立类的对象时,先调用各个对象成员的构造函数,初始化相应的对象成员,然后才执行类的构造函数,初始化类中其他成员。T

正确 错误

5、 this是一个隐含于每一个类的成员函数的特殊指针,它是一个指向正在被某个成员函数 *** 作的对象的指针。T

正确 错误

首先你要明白C++为什么要引进虚函数这个机制,

虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。

从以上的定义来看,需函数简单的说就是为了让基类指针能够指向派生类中与基类同名的函数而引进的,举个简单的例子,1:你定义了一个“图形类”这样的基类,然后再类中定义了一个求图形周长的函数(不是虚函数);2:现在再定义这个“图形类”的一个派生类“三角形类”,中也含有一个求三角形周长的函数(不是虚函数);3:再定义一个这个“图形类”的一个派生类“矩形类”,中也含有一个求矩形周长的函数(不是虚函数);4:现在回到主函数,你定义了这个“图形类”的一个指针(即基类的指针),根据C++的规定,基类的对象指针可以指向它的公有派生类的对象,但是当其指向公有的派生类对象时,它只能访问派生类中从基类继承来的成员,而不能访问公有派生类中定义的成员。

所以,你定义的这个指针是不能够指向“三角形”和“矩形”类中定义的那个周长函数,但是,如果你在基类中将这个周长函数定义为虚函数,则这样的代码是允许的,而且能够到达预期目的。

为什么呢?你想想你在基类中只定义一个基类指针,可以通过改变基类指针所指的对象(即派生类对象),就可以通过指针访问这个虚函数(虚函数的函数原型是一样的)而完成不同图形周长的计算和输出,显然,这是很值得提倡的,因为你只需“p->perimeter”一个代码就能完成很多图形的工作。

不知道,你能否明白,总的来说就是虚函数就是为了让基类指针(或引用)能访问派生类中定义的成员。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11186753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存