备考计算机二级 C++ 程序设计考试,选择题是不容忽视的重要部分。
今天为大家带来 10 道选择题,聚焦继承与派生的核心考点,助力掌握类的重用机制。
1、下列关于继承的叙述中,错误的是( )
A. 继承是面向对象程序设计的重要特性之一
B. 派生类可以继承基类的所有成员
C. 派生类可以拥有自己的成员
D. 派生类可以重新定义基类的成员函数
答案:B
分析:派生类不能继承基类的私有成员,B 选项错误;A、C、D 均正确,故选 B。
2、在 C++ 中,用于实现运行时多态性的是( )
A. 友元函数
B. 重载函数
C. 模板函数
D. 虚函数
答案:D
分析:虚函数通过动态绑定实现运行时多态,故选 D。
3、下列关于派生类构造函数的叙述中,正确的是( )
A. 派生类构造函数必须对基类的所有数据成员进行初始化
B. 派生类构造函数不能调用基类的构造函数
C. 派生类构造函数的成员初始化列表中可以包含基类的构造函数
D. 派生类构造函数的参数个数必须多于基类构造函数的参数个数
答案:C
分析:派生类构造函数可在初始化列表中调用基类构造函数,A、B、D 错误,故选 C。
4、有如下类定义:
class Base {
public:
int data;
};
class Derived1 : private Base {};
class Derived2 : protected Base {};
在 main 函数中,下列语句正确的是( )
A. Derived1 d1; d1.data=0;
B. Derived2 d2; d2.data=0;
C. 以上都不正确
D. 以上都正确
答案:C
分析:Derived1 私有继承 Base,Derived2 保护继承 Base,其对象都不能直接访问基类的 public 成员 data,故选 C。
5、下列关于虚函数的叙述中,正确的是( )
A. 虚函数不得是静态成员函数
B. 构造函数可以是虚函数
C. 派生类必须重定义基类的虚函数
D. 虚函数可以是友元函数
答案:A
分析:虚函数不能是静态成员函数,A 正确;构造函数不能是虚函数,B 错误;派生类可重写也可不重写虚函数,C 错误;虚函数必须是类的成员函数,不能是友元,D 错误,故选 A。
6、有如下程序:
#include<iostream>
using namespace std;
class Base {
public:
void show() { cout<<"Base"; }
};
class Derived : public Base {
public:
void show() { cout<<"Derived"; }
};
int main() {
Base *p=new Derived;
p->show();
delete p;
return 0;
}
运行时的输出结果是( )
A. Base
B. Derived
C. BaseDerived
D. DerivedBase
答案:A
分析:show 不是虚函数,p->show () 调用基类版本,输出 Base,故选 A。
7、下列关于多继承的叙述中,错误的是( )
A. 多继承即一个派生类可以有多个基类
B. 多继承可能产生二义性问题
C. 多继承不能使用 virtual 关键字
D. 多继承可以通过虚基类解决二义性问题
答案:C
分析:多继承中可使用 virtual 声明虚基类以解决二义性,C 选项错误;A、B、D 均正确,故选 C。
8、有如下类定义:
class Base {
protected:
int x;
public:
Base(int x=0) : x(x) {}
};
class Derived : public Base {
int y;
public:
Derived(int x,int y) : y(y) {}
};
该类定义存在的错误是( )
A. 派生类构造函数未初始化基类成员 x
B. 基类构造函数参数不应有默认值
C. 派生类不能访问基类的 protected 成员
D. 派生类成员 y 的初始化方式错误
答案:A
分析:派生类构造函数应在初始化列表中调用基类构造函数(如Base(x)),否则基类默认构造函数被调用,但基类无默认构造函数,故选 A。
9、下列关于抽象类的叙述中,正确的是( )
A. 抽象类可以实例化对象
B. 抽象类的派生类一定不是抽象类
C. 抽象类中的纯虚函数必须被派生类重定义
D. 抽象类中一定含有纯虚函数
答案:D
分析:抽象类含纯虚函数,不能实例化,A 错误;派生类若未重写纯虚函数仍为抽象类,B、C 错误;D 正确,故选 D。
10、有如下程序:
#include<iostream>
using namespace std;
class A {
public:
virtual void f() { cout<<"A"; }
};
class B : public A {
public:
void f() { cout<<"B"; }
};
class C : public A {
public:
void f() { cout<<"C"; }
};
void show(A *p) { p->f(); }
int main() {
A a; B b; C c;
show(&a); show(&b); show(&c);
return 0;
}
运行时的输出结果是( )
A. ABC
B. AAA
C. BBB
D. CCC
答案:A
分析:f 是虚函数,show 函数通过基类指针调用派生类重写的函数,输出 ABC,故选 A。
希望这 10 道题能帮助大家对继承与派生知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)

1382

被折叠的 条评论
为什么被折叠?



