1.下列哪种C++语法形式不属于多态?( )
编号 |
选项 |
A |
重载运算符 |
B |
重载函数 |
C |
对象多态 |
D |
不同函数中定义的同名局部变量 |
2.为类ABC定义重载运算符“+”,下列哪种定义形式是正确的?( )
编号 |
选项 |
A |
定义为类ABC的函数成员:ABC operator +( ABC obj ) { … } |
B |
定义为类ABC的函数成员:ABC operator +( ABC obj1, ABC obj2 ) { … } |
C |
定义为类ABC的函数成员:void operator +( ) { … } |
D |
定义为类ABC的友元函数:ABC operator +( ABC obj ) { … } |
3.下列关于Liskov准则的描述中,错误的是( )。
编号 |
选项 |
A |
派生类的对象可以初始化基类引用 |
B |
派生类的对象不能赋值给基类对象 |
C |
派生类对象的地址可以赋值给基类的对象指针 |
D |
应用Liskov准则,实际上是将派生类对象当作基类对象来使用 |
4.定义如下的基类A和派生类B:
class A
{
public:
virtual void fun( )
{ cout << “A :: fun( ) called”; }
};
class B : public A
{
public:
void fun( )
{ cout << “B :: fun( ) called”; }
};
执行下列代码:
A *p;
B bObj;
p = &bObj;
p->fun( );
通过基类指针p调用虚函数成员fun,将自动调用哪个函数?( )
编号 |
选项 |
A |
B::fun( ) |
B |
先调用A::fun( ),再调用B::fun( ) |
C |
语法错误 |
D |
A::fun( ) |
5.下列关于对象多态性的描述中,错误的是( )。
编号 |
选项 |
A |
通过基类引用访问派生类对象的虚函数成员,将自动调用基类的函数成员 |
B |
应用对象多态性的目的是为提高程序代码的可重用性 |
C |
通过基类对象指针访问派生类对象的虚函数成员,将自动调用派生类的函数成员 |
D |
应用对象多态性,实际上是用基类来代表派生类 |
6.下列关于虚函数的描述,错误的是( )。
编号 |
选项 |
A |
只有虚函数成员才会在调用时表现出多态性 |
B |
类中的静态函数、构造函数、析构函数都可以是虚函数 |
C |
声明虚函数需使用关键字virtual |
D |
基类中声明的虚函数成员被继承到派生类后仍是虚函数 |
7.下列关于纯虚函数的描述,错误的是( )。
编号 |
选项 |
A |
纯虚函数在实现之后就是一个正常的虚函数,会在调用时表现出多态性 |
B |
定义纯虚函数的目的是为了重用其算法代码 |
C |
含有纯虚函数成员的类被称为抽象类 |
D |
纯虚函数没有函数体 |
8.下列关于抽象类的描述,错误的是( )。
编号 |
选项 |
A |
抽象类的派生类一定是抽象类 |
B |
不能用抽象类定义对象,即抽象类不能实例化 |
C |
可以用抽象类定义对象指针,指向其派生类对象 |
D |
可以用抽象类定义对象引用,引用其派生类对象 |
9.下列关于多继承的描述,错误的是( )。
编号 |
选项 |
A |
多继承时,不同基类必须使用相同的继承方式 |
B |
派生类可以从多个基类继承,这就是多继承 |
C |
多继承会造成从不同基类所继承的成员之间互相重名 |
D |
多继承时,派生类不能继承基类的构造和析构函数 |
10.派生类从基类A和B各继承了一个数据成员x。如需访问派生类对象obj中从基类A继承来的成员x,下列哪种访问形式是正确的?( )
编号 |
选项 |
A |
obj.A.x |
B |
obj.x |
C |
obj.A::x |
D |
obj.B::x |