跳转至

练习07-类的继承

练习07-类的继承(2024级)

题量: 20 满分: 100
作答时间:05-10 19:43 至_06-15 19:43_

1.(单选题) 类有两种用法:一种是类的实例化,即生成类对象,参与系统的运行;另一种是通过( )派生新的类。

  • A. 复用
  • B. 继承
  • C. 封装
  • D. 引用

2.(单选题) 继承具有( ),即当基类也是一派生类时,底层的派生类也会自动继承间接基类的成员。

  • A. 传递性
  • B. 规律性
  • C. 重复性
  • D. 多样性

3.(单选题) 下列关于多继承二义性的描述中,错误的是( )。

  • A. 一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现二义性
  • B. 派生类有多个基类,这些基类又有一个共同的基类,派生类访问公共基类成员时可能出现二义性
  • C. 解决二义性的方法是采用类名限定
  • D. 基类和派生类中同时出现同名成员时,会产生二义性

4.(单选题) 下列关于虚基类的描述中,错误的是( )。

  • A. 使用虚基类可以消除由多继承产生的二义性
  • B. 构造派生类对象时,虚基类的构造函数只被调用一次
  • C. 声明“class B : virtual public A”说明类B为虚基类
  • D. 建立派生类对象时,首先调用虚基类的构造函数

5.(单选题) 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数),这3种构造函数的调用顺序为( )。

  • A. abc
  • B. acb
  • C. cab
  • D. cba

6.(单选题) 在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( )。

  • A. 派生类的对象可以赋给基类的对象
  • B. 派生类的对象可以初始化基类的引用
  • C. 派生类的对象可以直接访问基类中的成员
  • D. 派生类的对象的地址可以赋给指向基类的指针

7.(单选题) 派生类成员对其基类中的( )成员是不可访问的。

  • A. 公有继承的私有
  • B. 私有继承的公有
  • C. 私有继承的保护
  • D. 保护继承的保护

8.(单选题) 基类( )不允许外界访问,但允许派生类成员访问,这样既有一定隐藏能力,又能实现数据共享。

  • A. 公有成员
  • B. 私有成员
  • C. 保护成员
  • D. 私有成员函数

9.(单选题) 生成派生类对象时,派生类构造函数调用基类构造函数的条件是( )。

  • A. 无需任何条件
  • B. 基类中显式定义了构造函数
  • C. 派生类中显式定义了构造函数
  • D. 派生类构造函数明确调用了基类构造函数

10.(单选题) 下面程序的输出结果是( )。

#include<iostream>  
using namespace std;  
class Base  
    int x;  
public:  
  Base(int n=0):x(n)  cout<<n;    
int getX() const    return x;     
;  
class Derived:public Base  
    int y;  
public:  
  Derived(int m, int n): y(m), Base(n)  cout<<m;    
Derived(int m): y(m)   cout<<m;     
;  
int main()  
Derived d1(3), d2(5,7);  
  
- A. 375
- B. 357
- C. 0375
- D. 0357

11.(单选题) 下面程序的输出结果是( )。

#include<iostream>  
using namespace std;  
class A    public:  A()  cout<<A;    ;  
class B    public:  B()  cout<<B;    ;  
class C: public A  
    B b;  
public:  C() cout<<C;  
;  
int main( )    C obj;     
- A. CBA
- B. BAC
- C. ACB
- D. ABC

12.(单选题) 下面程序的输出结果是( )。

#include<iostream>  
using namespace std;  
class TestClass  
    int a;  
public:  
  TestClass(int x)  a=x;  
void show()  cout<<a;    
;  
class TestClass1:public TestClass  
    int b;  
public:  
  TestClass1(int i):TestClass(i+1),b(i)   
void show()  cout<<b;     
;  
int main()  
TestClass b(5),*p;  
TestClass1 d(1);  
p=&d;  
p->show();  
  
- A. 5
- B. 1
- C. 0
- D. 2

13.(单选题) 有如下类声明:

class XA  
    int x;  
public:  
  XA(int n) x=n;  
;  
class XB:public XA  
    int y;  
public:  
  XB(int a,int B);  
;  
在构造函数XB的下列定义中,正确的是( )。
- A. XB::XB(int a,int B):x(a),y(B){ }
- B. XB::XB(int a,int B):XA(a),y(B){ }
- C. XB::XB(int a,int B):x(a),XB(B){ }
- D. XB::XB(int a,int B):XA(a),XB(B){ }

14.(单选题) 下面程序的输出结果是( )。

#include<iostream>  
using namespace std;  
class C1   public:  ~C1() cout<<1;   ;  
class C2: public C1  public: ~C2() cout<<2;   ;  
int main()  
    C2 cb2;  
C1 *cb1;  
  
- A. 121
- B. 21
- C. 211
- D. 12

15.(单选题) 下面程序的输出结果是( )。

#include<iostream>  
using namespace std  
class ONE  
    int c  
public:  
  ONE():c0){ cout<<1;}  
ONEint n):cn){ cout<<2;}  
};  
class TWO  
    ONE one1,one2  
public:  
  TWOint m):one2m){cout<<3;}  
};  
int main(){  TWO t4(0);    
- A. 3
- B. 23
- C. 123
- D. 213

16.(单选题) 若已定义了类Vehicle,则下列派生类定义中,错误的是( )。

  • A. class Car:Vehicle{…};
  • B. class Car:public Car{…};
  • C. class Car:public Vehicle{…};
  • D. class Car:virtual public Vehicle{…};

17.(单选题) 有如下程序:

class Base   public: void fun()  cout<<'B';     ;  
class Derived:public Base     public: void fun()  (      );cout<<'D';}};  
int main()    Derived d;     D.fun();   return 0;     
若程序的输出结果是BD,则空白缺失的部分是( )。
- A. fun()
- B. Base.fun()
- C. Base::fun()
- D. Base->fun()

18.(单选题) 下面程序编译时有错误的是( )。

#include<iostream>  
using namespace std;  
class Media  
   public:  
  void Name(){}  
void Show(){}  
protected:  
  int page;  
;  
class Book:private Media  
    public:   
  void Print()cout<<page<<endl;  
void Show() Media::Show();      //①  
;  
int main()  
    Book B;  
B.Name();    //②  
B.Print();    //③  
B.Show();    //④  
  
- A. 语句①
- B. 语句②
- C. 语句③
- D. 语句④

19.(单选题) 下面程序的输出结果是( )。

class Point  
    int x,y;  
public:   
  Point(int x1=0,int y1=0):x(x1),y(y1)     
int get()return x+y;  
;  
class Circle  
    Point center;  
int radius;  
public:  
  Circle(int cx,int cy,int r):center(cx,cy),radius(r){}  
int get()return center.get()+radius;  
;  
int main()  
    Circle c(3,4,5);  
cout<<c.get();  
  
- A. 5
- B. 7
- C. 9
- D. 12

20.(单选题) 下面程序的输出结果是( )。

#include<iostream>  
using namespace std;  
class AA  public:  AA() cout<<'1';    ;  
class BB: public AA  
        int k;  
public:   BB():k(0) cout<<'2';   
BB(int n):k(n) cout<<'3';   
;  
int main()  BB b(4), c;   
- A. 1312
- B. 132
- C. 32
- D. 1412


练习07-类的继承(2024级)答案

正确答案列表:

  1. B
  2. A
  3. D
  4. C
  5. A
  6. C
  7. A
  8. C
  9. A
  10. C
  11. D
  12. D
  13. B
  14. B
  15. C
  16. B
  17. C
  18. B
  19. D
  20. A