大学MOOC 面向对象程序设计(C++)-02-祝凯(北京邮电大学世纪学院)1450804245 最新慕课完整章节测试答案
第二周 类和对象基础
第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=ⅆ则指针变量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
