跳转至

练习04-类与对象

练习04-类与对象

题量: 34 满分: 100
作答时间:04-29 19:36 至_05-30 19:36_

1.(单选题) 下列关于C++语言类的描述中错误的是( )。

  • A. 类用于描述事物的属性和对事物的操作
  • B. 类与类之间必须是平等的关系,而不能组成层次结构
  • C. 类与类之间通过封装而具有明确的独立性
  • D. 类与类之间可以通过一些方法进行通信和联络

2.(单选题) 下列关于对象的描述中,错误的是( )。

  • A. 对象就是C语言中的结构变量
  • B. 对象是属性和行为的封装体
  • C. 对象是类的一个实例
  • D. 对象是现实世界中客观存在的某种实体

3.(单选题) 类的实例化是指( )。

  • A. 定义类
  • B. 创建类的对象
  • C. 指明具体类
  • D. 调用类的成员

4.(单选题) 不可以成为类的数据成员的是( )。

  • A. 本类对象
  • B. 另一个类的对象
  • C. 类的指针或引用
  • D. 其它简单的数据类型

5.(单选题) 下列关于对象的描述中,错误的是( )。

  • A. 定义对象时系统会自动进行初始化
  • B. 对象成员的表示与C语言结构变量的成员表示相同
  • C. 同类的所有对象占有内存字节数相同
  • D. 一个类所能创建对象的个数是有限制的

6.(单选题) 类sample包含成员数据n(int),成员函数setValue的类外实现正确的是( )。

  • A. sample::setValue(int n0){ n=n0; }
  • B. setValue(int n0){ n=n0; }
  • C. void sample::setValue(int n0){ n=n0; }
  • D. void setValue(int n0){ n=n0; }

7.(单选题) 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。

  • A. 公有类型
  • B. 私有类型
  • C. 保护类型
  • D. 友元类型

8.(单选题) 以下关键字不能用来声明类的访问权限的是( )。

  • A. public
  • B. static
  • C. protected
  • D. private

9.(单选题) 下列关于类定义的说法中,正确的是( )。

  • A. 类定义中包括数据成员和函数成员的声明
  • B. 类成员的缺省访问权限是保护的
  • C. 数据成员必须被声明为私有的
  • D. 成员函数只能在类体外进行定义

10.(单选题) 已知Foo类的声明为:class Foo { int bar; }; 则成员bar的访问权限是( )。

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

11.(单选题) 下列说法中正确的是( )。

  • A. 类定义中只能说明函数成员的函数头,不能定义函数体
  • B. 类中的函数成员可以在类体中定义,也可以在类体之外定义
  • C. 类中的函数成员在类体之外定义时必须要与类声明在同一文件中
  • D. 在类体之外定义的函数成员不能操作该类的私有数据成员

12.(单选题) 下列关于类的定义格式的描述中,错误的是( )。

  • A. 类中成员有3种访问权限
  • B. 定义类的关键字通常用class,也可用struct
  • C. 类的定义可分说明部分和实现部分
  • D. 类中成员函数都是公有的,数据成员都是私有的

13.(单选题) 若a为AA类的非静态数据成员,在AA类的一个成员函数定义中访问a时,其书写格式为( )。

  • A. a()
  • B. AA.a
  • C. a
  • D. AA::a()

14.(单选题) 若AA为一个类,a为该类的私有整型数据成员,getA()为该类的一个非静态公有成员函数,功能是返回a的值。如果x为该类的一个对象,要在类外访问x对象中a的值,正确的访问格式为( )。

  • A. AA.getA()
  • B. x.getA()
  • C. x.a
  • D. AA::a

15.(单选题) 在类的定义中,为对象分配内存,对类的数据成员初始化并执行其他内部管理操作的函数是( )。

  • A. 友元函数
  • B. 虚函数
  • C. 构造函数
  • D. 析构函数

16.(单选题) 下列关于构造函数的描述中,错误的是( )。

  • A. 构造函数可以设置默认参数
  • B. 构造函数在定义对象时自动执行
  • C. 构造函数不可以重载
  • D. 构造函数可以是内联函数

17.(单选题) 类MyA的复制构造函数是( )。

  • A. MyA()
  • B. MyA(MyA*)
  • C. MyA(MyA&)
  • D. MyA(MyA)

18.(单选题) C++语言中关于构造函数的说法正确的是( )。

  • A. 构造函数的函数名不必和类名相同
  • B. 构造函数只能有一个
  • C. 每个类必定有构造函数
  • D. 构造函数必有返回值

19.(单选题) 自由函数fun的定义如下。执行语句d=fun(a)后Demo类的复制构造函数被调用次数是( )次。

Demo FunDemo &b  Demo c(b);  return c;    
- A. 1
- B. 2
- C. 3
- D. 4

20.(单选题) 对于一个类定义,下列叙述中错误的是( )。

  • A. 如果没有定义复制构造函数,编译器将生成一个复制构造函数
  • B. 如果没有定义默认的构造函数,编译器一定将生成一个默认的构造函数
  • C. 如果没有定义构造函数,编译器将生成一个默认的构造函数和一个复制构造函数
  • D. 如果已经定义了构造函数和复制构造函数,编译器不会生成任何构造函数

21.(单选题) 下列情况中,不会调用复制构造函数的是( )。

  • A. 用一个对象去初始化同一类的另一个新对象时
  • B. 将类的一个对象赋值给该类的另一个对象时
  • C. 函数的形参是类的对象,调用函数进行形参和实参结合时
  • D. 函数的返回值是类的对象,函数执行返回调用时

22.(单选题) 下列关于对象初始化的叙述中,正确的是( )。

  • A. 定义对象的时候不能对对象进行初始化
  • B. 定义对象之后可以显式地调用构造函数进行初始化
  • C. 定义对象时将自动调用构造函数进行初始化
  • D. 在一个类中必须显式地定义构造函数实现初始化

23.(单选题) 类的析构函数的作用是( )。

  • A. 一般成员函数的初始化
  • B. 类的初始化
  • C. 对象的初始化
  • D. 删除类创建的对象

24.(单选题) ( )是析构函数的特征。

  • A. 一个类中只能定义一个析构函数
  • B. 析构函数名与类名不同
  • C. 析构函数的定义只能在类体内
  • D. 析构函数可以有一个或多个参数

25.(单选题) 下列关于析构函数的描述中,错误的是( )。

  • A. 析构函数的函数体都为空
  • B. 析构函数是用来释放对象的
  • C. 析构函数是系统自动调用的
  • D. 析构函数是不能重载的

26.(单选题) 下列不是类的成员函数的是( )。

  • A. 构造函数
  • B. 析构函数
  • C. 友元函数
  • D. 复制构造函数

27.(单选题) 下列关于类成员对象构造函数调用顺序的叙述中,正确的是( )。

  • A. 与它们在初始化列表中顺序相同
  • B. 与它们在类中声明的顺序相同
  • C. 与析构函数的调用顺序相同
  • D. 顺序不确定

28.(单选题) 下面类的定义,有( )处错误。

class MyClass  
  public:  
    void MyClass()  
    ~MyClass(int vahle)  
  private:  
    int i  
;  
- A. 1
- B. 2
- C. 3
- D. 4

29.(单选题) 有如下类定义:

class MyClass  
    int value;  
public:  
  MyClass(int n): value (n)    
    int gerValue() return value;   
;  
则类 MyClass 的构造函数的个数是( )
- A. 1 个
- B. 2 个
- C. 3 个
- D. 4 个

30.(单选题) 下列程序的运行结果是( )。

#include<iostream>  
using namespace std;  
class Location  
        private:  int X,Y;  
    public:  
        void init(int=0,int=0);  
        void valueX(int val)     X=val;     
        int valueX()     return X;      
        void valueY(int val)     Y=val;     
        int valueY()        return  Y;  
;  
void Location::init(int initX, int initY)      X=initX; Y=initY;     
int main()    
  Location A,B;  
  A.init();      
  B.valueX(5);  
  cout<<A.valueX()<<A.valueY();  
  B.init(6,2);   B.valueY(4);  
  cout<<B.valueX()<<B.valueY()<<endl;  
  
- A. 5064
- B. 0064
- C. 5062
- D. 0062

31.(单选题) 有如下类定义

class MyClass  
    int x;  
public:  
  MyClass():x(0),y(0)    
    int GetX()    return x;     
    void SetX(int xx)   x=xx;     
    int y;  
;  
已知obj是类MyClass的对象,下列语句中违反类成员访问控制权限的是( )
- A. obj.x;
- B. obj.y;
- C. obj.GetX();
- D. obj.SetX(0);

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

#include<iostream>  
using namespace std;  
class Test  
public:  
  Test()   
    Test(const Test &t) cout<<1;  
;  
Test fun(Test &u)     
  Test t=u;   return t;   
  
int main()      
  Test x,y;      
  x=fun(y);    
  
- A. 无输出
- B. 1
- C. 11
- D. 111

33.(单选题) 有如下两个类定义

class AA  ;  
class BB    
  AA v1,*v2;    
  BB v3;    
  int *v4;    
;  
其中有一个成员变量的定义是错误的,这个变量是( )。
- A. v1
- B. v2
- C. v3
- D. v4

34.(单选题) 下面程序的运行结果为( )。

#include<iostream>  
using namespace std;  
class A  
           int num;  
public: 
  A(int i)  num=i;      
    A(A &a)  num=a.num++;    
    void print()  cout<<num;     
;  
int main()    
  A a(1),b(a);  
  a.print();  b.print();     
  
- A. 11
- B. 12
- C. 21
- D. 22


练习04-类与对象答案

正确答案列表:

  1. B
  2. A
  3. B
  4. A
  5. D
  6. C
  7. D
  8. B
  9. A
  10. A
  11. B
  12. D
  13. C
  14. B
  15. C
  16. C
  17. C
  18. C
  19. B
  20. B
  21. B
  22. C
  23. D
  24. A
  25. A
  26. C
  27. B
  28. B
  29. A
  30. B
  31. A
  32. C
  33. C
  34. C