第二周 类和对象基础

第4周测验

1、单选题:
‎Sample 是一个类,执行下面语句后,调用 Sample 类的构造函数的次数‌‎是 Sample a[2], *P = new Sample;‌
选项:
A: 0
B: 1
C: 2
D: 3
答案: 【 3

2、单选题:
​建立一个类对象时,系统自动调用‎
选项:
A: 析构函数
B: 构造函数
C: 静态函数
D: 友元函数
答案: 【 构造函数

3、单选题:
‌下列关于构造函数说法不正确的是__________。‍
选项:
A: 构造函数必须与类同名
B: 构造函数可以省略不写
C: 构造函数必须有返回值
D: 在构造函数中可以对类中的成员进行初始化
答案: 【 构造函数必须有返回值

4、单选题:
​在面向对象程序设计中,实现信息隐蔽是靠__________。​
选项:
A: 对象的继承
B: 对象的封装
C: 对象的分类
D: 对象的多态
答案: 【 对象的封装

5、单选题:
‎有关类与对象的说法不正确的是______。‎
选项:
A: 类是同类对象的定义
B: 对象是类的具体化实例
C: 类包含对象的具体属性值
D: 类包含同类对象的属性名
答案: 【 类包含对象的具体属性值

6、单选题:
​如果没有显式定义构造函数(包括复制构造函数), C++编译器就(  )。‌
选项:
A: 出现编译错误
B: 没有构造函数
C: 必须显示定义
D: 隐式定义默认的构造函数
答案: 【 隐式定义默认的构造函数

7、单选题:
‎下列是构造函数的特点,( )是错误的。 ‌
选项:
A: 构造函数是一种成员函数,它具有一般成员函数的特点
B: 构造函数的名称与其类名相同
C: 构造函数必须指明其类型
D: 一个类中可定义一个或多个构造函数
答案: 【 构造函数必须指明其类型

8、单选题:
‏下面概念中,不属于面向对象方法的是______。​
选项:
A: 对象、消息
B: 继承、多态
C: 类、封装
D: 过程调用
答案: 【 过程调用

9、单选题:
​下列表达方式正确的是( )。 ‏
选项:
A: class P{public:       int x=15;       void show()      { cout<<x; } };
B: class P{public:      int x;      void show()        { cout<<x; }}
C: class P{   int f; };  f=25;
D: class P{ int a; public:      void Seta (int x)       { a=x; }};
答案: 【 class P{ int a; public:      void Seta (int x)       { a=x; }};

10、单选题:
‎下列关于构造函数的描述中,错误的是(   )。‍
选项:
A: 构造函数可以设置默认参数
B: 构造函数在定义类对象时自动执行
C: 构造函数可以是内联函数
D: 构造函数不可以重载
答案: 【 构造函数不可以重载

第5周测验

1、单选题:
​对类的构造函数和析构函数描述正确的是( )。‌
选项:
A: 构造函数可以重载,析构函数不能重载
B: 构造函数不能重载,析构函数可以重载
C: 构造函数和析构函数均可以重载
D: 构造函数和析构函数均不能重载
答案: 【 构造函数可以重载,析构函数不能重载

2、单选题:
‍以下有关析构函数的叙述,不正确的是( )。‎
选项:
A: 在一个类只能定义一个析构函数
B: 析构函数和构造函数一样可以有形参
C: 析构函数不允许用返回值
D: 析构函数名前必须冠有符号~
答案: 【 析构函数和构造函数一样可以有形参

3、单选题:
‏假定 MyCIass 为一个类,那么下列的函数说明中, (    )为该类的析构函数。​
选项:
A: void ~MyClass( );
B: ~MyClass(int n);
C: MyClass( );
D: ~MyClass( );
答案: 【 ~MyClass( );

4、单选题:
‍设 MClass 是一个类,有以下定义: MClass dd,*pp=&dd;则指针变量pp 可以通过( )访问对象 dd 的成员。‎
选项:
A: ∷
B: .
C: &
D: ->
答案: 【 ->

5、单选题:
‍已知 f1(int)是类 A 的公有成员函数, p 是指向成员函数 f1()的指针,采用( )是正确的。‍
选项:
A: p = f1
B: p = A::f1
C: p = A::f1( )
D: p = f1( )
答案: 【 p = A::f1

6、单选题:
‏已知 p 是一个指向类 A 的公有数据成员 m 的指针, A1 是类 A 的一个对象。如果要将 A1 的 m 赋值为 5, ( )是正确的。‏
选项:
A: A1.p = 5
B: A1->p = 5
C: A1.*p = 5
D: *A1.p = 5
答案: 【 A1.*p = 5

7、单选题:
‍定义析构函数时,应该注意( ) ‎
选项:
A: 其名与类名完全相同
B: 返回类型是 void 类型
C: 无形参,也不可重载
D: 函数体中必须有 delete 语句
答案: 【 无形参,也不可重载

8、单选题:
‍下列关于 this 指针的叙述中,正确的是(  )。‌
选项:
A: 任何与类相关的函数都有 this 指针
B: 类的成员函数都有 this 指针
C: 类的友元函数都有 this 指针
D: 类的非静态成员函数才有 this 指针
答案: 【 类的非静态成员函数才有 this 指针

9、单选题:
‌(  )的功能是对象进行初始化。‏
选项:
A: 析构函数
B: 数据成员
C: 构造函数
D: 静态成员函数
答案: 【 构造函数

10、单选题:
‍下面(  )项是对构造函数和析构函数的正确定义。‍
选项:
A: void X::X( ), void X::~X( )
B: X::X(参数), X::~X( )
C: X::X(参数), X::~X(参数)
D: void X::X(参数), void X::~X(参数)
答案: 【 X::X(参数), X::~X( )

第三周 类和对象提高

第6周测验

1、单选题:
‎对于常成员函数,下面描述正确的是(  )‍
选项:
A: 类的成员函数可以操作常对象
B: 类的成员函数不能操作常对象
C: 只有常成员函数可以操作常对象
D: 在常成员函数中,常对象可以被更新
答案: 【 只有常成员函数可以操作常对象

2、单选题:
​在下列函数原型中,可以作为类 AA 构造函数的是( )。‎
选项:
A: void AA(int);
B: int AA( );
C: AA(int)const;
D: AA(int);  
答案: 【 AA(int);  

3、填空题:
‏有如下程序:‌‏#include<iostream>‌‏using namespace std;‌‏class VAC‌‏{‌‏public:‌‏ int f()const{return 3;}‌‏ int f(){return 5;}‌‏};‌‏int main()‌‏{‌‏ VAC v1;‌‏ const VAC v2;‌‏ cout<<v1.f()<<v2.f();‌‏ return 0;‌‏}‌‏写出其运行时的输出结果。‌
答案: 【 53

4、填空题:
‌有 如 下 程 序 :‏‌#include<iostream.h>‏‌class Con‏‌{‏‌ char ID;‏‌public:‏‌Con(){ID='A';cout<<1;}‏‌Con(char id){ID=id;cout<<2;}‏‌char getID(){return ID;}‏‌};‏‌int main()‏‌{‏‌ Con c1;‏‌ cout<<c1.getID();‏‌ Con c2('B');‏‌ cout<<c2.getID();‏‌ return 0;‏‌}‏‌写出此程序的运行结果。‏
答案: 【 1A2B

5、填空题:
‌#include<iostream>‎‌#include<iomanip>‎‌using namespace std;‎‌class MyClass‎‌{‎‌public:‎‌ MyClass(){cout<<'A';}‎‌ MyClass(char c){cout<<c;}‎‌ ~MyClass(){cout<<'B';}‎‌};‎‌int main()‎‌{‎‌ MyClass p1,*p2; ‎‌ p2=new MyClass('X' );‎‌ delete p2;‎‌ return 0;‎‌}‎‌执行这个程序幕上将显示输出______。‎
答案: 【 AXBB

6、填空题:
‎创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数,下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是: ​‎#include<iostream>​‎using namespace std;​‎class Foo​‎{​‎public:​‎ Foo(int X){cout<<'A';}​‎ Foo(){}​‎};​‎int main()​‎{​‎ Foo f[3],g(3);​‎ return 0;​‎}​
答案: 【 A

7、填空题:
‎分 析 以 下 程 序 的 执 行 结 果 ‍‎#include<iostream.h>‍‎class Sample‍‎{‍‎ int x,y;‍‎public:‍‎ Sample(){x=y=0;}‍‎ Sample(int a,int b){x=a;y=b;}‍‎ void disp(){cout<<"x="<<x<<",y="<<y<<endl;}‍‎};‍‎void main()‍‎{‍‎ Sample s(2,3),*p=&s;‍‎ p->disp();‍‎}‍
答案: 【 x=2,y=3

第8周测验

1、单选题:
‌一个类的友元函数能够访问该类的__________。​
选项:
A: 私有成员
B: 保护成员
C: 公有成员
D: 所有成员
答案: 【 所有成员

2、单选题:
​下面关于友元函数描述正确的是( )。‏
选项:
A: 友元函数的实现必须在类的内部定义
B: 友元函数是类的成员
C: 友元函数破坏了类的封装性和隐藏性
D: 友元函数不能访问类的私有成员
答案: 【 友元函数破坏了类的封装性和隐藏性

3、单选题:
‏下面对静态数据成员的描述中,正确的是( )。‌
选项:
A: 类的每一个对象都有自己的静态数据成员
B: 类的不同对象有不同的静态数据成员值
C: 静态数据成员不能通过类的对象调用
D: 静态数据成员是类的所有对象共享的数据
答案: 【 静态数据成员是类的所有对象共享的数据

4、单选题:
‎关于友元,下列说法正确的是( )。‌
选项:
A: a 类为 b 类的友元类,则 a 类中的所有函数就可以访问 b 类中的所有成员
B: 友元函数的定义在类体中
C: 友元只能是类
D: 友元只能是函数
答案: 【 a 类为 b 类的友元类,则 a 类中的所有函数就可以访问 b 类中的所有成员

5、单选题:
‌若要把函数 void f()定义为类 aClass 的友元函数,则应该在类 aClass定义中加入的语句是()。‍
选项:
A: void f()
B: static void f()
C: friend f()
D: friend void f()
答案: 【 friend void f()

6、单选题:
‍下述静态成员的特性中,( )是错误的。‌
选项:
A: 静态成员函数不能利用 this 指针
B: 静态数据成员要在类体外进行初始化
C: 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
D: 静态数据成员不是所有对象所共有的
答案: 【 静态数据成员不是所有对象所共有的

7、单选题:
‌下列情况中,不会调用拷贝构造函数的是______。​
选项:
A: 用一个对象去初始化同一类的另一个新对象时
B: 将类的一个对象赋予该类的另一个对象时
C: 函数的形参是类的对象,调用函数进行形参和实参结合时
D: 函数的返回值是类的对象,函数执行返回调用时
答案: 【 将类的一个对象赋予该类的另一个对象时

8、单选题:
‌下面对静态数据成员的描述中,正确的是( )。​
选项:
A: 静态数据成员可以在类体内进行初始化
B: 静态数据成员不可以在类体内进行初始化
C: 静态数据成员不能受 private 控制符的作用
D: 静态数据成员不可以直接用类名调用
答案: 【 静态数据成员不可以在类体内进行初始化

9、填空题:
‍#include<iostream>‌‍using namespace std;‌‍class Test‌‍{‌‍public:‌‍ Test(){n+=2;}‌‍ ~Test(){n-=3;}‌‍ static int getNum(){return n;}‌‍private:‌‍ static int n;‌‍};‌‍ int Test::n=1;‌‍ int main()‌‍ {‌‍ Test* p=new Test;‌‍ delete p;‌‍ cout<<"n="<<Test::getNum()<<endl;‌‍ return 0;‌‍ }‌‍执行后的输出结果是( )。‌
答案: 【 n=0

10、填空题:
‎写出以下程序的输出结果  ‏‎#include<iostream.h>‏‎class Sample‏‎{‏‎ int x;‏‎public:‏‎ Sample(int a)‏‎ {‏‎ x=a;‏‎ cout<<"x="<<x<<endl;‏‎ }‏‎};‏‎void func(int n){static Sample obj(n);}‏‎void main()‏‎{‏‎ func(1);‏‎ func(10);‏‎}‏
答案: 【 x=1

11、填空题:
​写出以下程序的执行结果‌​#include<iostream.h>‌​class Sample‌​{‌​ int n;‌​public:‌​ Sample(int i){n=i;}‌​ friend int add(Sample &s1,Sample &s2);‌​};‌​int add(Sample &s1,Sample &s2){return s1.n+s2.n;}‌​void main()‌​{‌​ Sample s1(10),s2(20);‌​ cout<<add(s1,s2)<<endl;‌​}‌
答案: 【 30

第四周 运算符重载

第10周测验

1、单选题:
​下列关于运算符重载的描述中,错误的是( )。​
选项:
A: ::运算符不能重载
B: 类型转换运算符只能作为成员函数重载
C: 将运算符作为非成员函数重载时必须定义为友元
D: 重载[ ]运算符应完成 下标访问 操作
答案: 【 将运算符作为非成员函数重载时必须定义为友元

2、单选题:
‍已知表达式++a 中的++是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为()‍‍‍
选项:
A: .operator++(1)
B: operator++(a)
C: operator++(a,1)
D: a.operator++()
答案: 【 a.operator++()

3、单选题:
‌( ) 既可重载为一元运算符,又可重载为二元运算符。​
选项:
A: *
B: =
C: = 和 *
D: * 和 ++
答案: 【 *

4、填空题:
‌双目运算符重载函数为成员函数时,重载函数有            &nb

剩余75%内容付费后可查看

发表评论

电子邮件地址不会被公开。 必填项已用*标注