学堂在线《面向对象程序设计C++》习题(作业部分)
作业一
多选题 (2分)
C++源程序不能直接运行,需要经过如下哪些步骤,才能得到可以运行的程序?
A.编译器
B.链接器
C.汇编器
D.编辑器
正确答案:AB
判断题 (1分)
C++源程序必须使用两个以上的文件来存放,才能编译链接成可执行程序。
正确答案:×
多选题 (2分)
关于main()函数的参数,以下说法正确的是
A.不使用参数也是允许的
B.若带参数,则第一个参数是整数类型
C.若带参数,则第二个参数是字符串数组
D.参数名称只能使用argc和argv
正确答案:ABC
多选题 (2分)
为防止头文件重复包含,以下书写错误的是
A.错误
B.错误
C.错误
D.错误
正确答案:ABCD
作业二
多选题 (2分)
下列哪些语句可以完成对数组的初始化
A.char name[10] = "THU OOP";
B.char course[4]  {'O', 'O', 'P'};
C.int year[5] {2016, 2017, 2018};
D.int score[] = {60, 80, 90};
正确答案:ABCD
多选题 (2分)
下列哪些写法不正确
A.int* ptr = new int;
B.int* ptr = new int(3);
C.int * ptr = new int[3];
D.int* ptr = new int{3};
E.int* ptr = new[] int;
F.int ** ptr = new int[4][5];
正确答案:EF
多选题 (2分)
下列关于for循环语句的写法,正确的是:
A.第1句
B.第2句
C.第3句
D.第4句
正确答案:ABCD
判断题 (1分)
函数重载时,函数名必须一样,函数参数必须不同,至于函数返回值类型,则没有限定。
正确答案:
单选题 (1分)
以下关于函数参数缺省值的说法,正确的是:
A.当有多个函数参数时,任意一个都可以设置缺省值
B.若只有一个参数,则不能设置缺省值
C.只有整数参数才能设置缺省值
D.仅允许从函数参数列表的最后一个开始依次设置缺省值(一个或多个)
指向类成员函数的指针正确答案:D
判断题 (1分)
函数返回类型,既可以放在函数名前面(左边),也可以使用追踪返回类型的语法放到函数名的后面(右边)
正确答案:
多选题 (2分)
关于类成员的访问权限,以下说法正确的是:
A.访问权限可以成组设置
B.相同权限的成员,可以共用一个权限设置
C.同一权限说明不能出现多次
D.private必须在public之前出现
正确答案:AB
单选题 (1分)
下列关于私有成员的说法,正确的是
A.即使是类的成员函数,也不能访问私有成员
B.对象通过成员操作符,是可以访问自己隐藏的私有成员的
C.私有数据只能被私有成员函数访问,不能被公有成员函数访问
D.私有数据成员不能与公有数据成员同名
正确答案:D
多选题 (2分)
关于类的成员函数定义,以下说法正确的是:
A.既可以放在类中定义,也可以放在类外定义
B.在类外定义时,函数名前要加”类名::“进行限定
C.只有私有成员函数才能在类中进行定义
D.私有成员函数只能在定中进行定义
正确答案:AB
判断题 (1分)
所谓this指针,只是一种概念,是为了帮助我们理解类的运作方式而引入的,实际上在成员函数的参数列表中并没有这种变量被传入。
正确答案:×
多选题 (2分)
关于一个类的友元函数,以下说法正确的是:
A.友元要在类中进行声明
B.友元要在类中给出定义,编译器才能知道它是否符合友元的安全要求
C.友元也是类的成员函数之一
D.友元函数可以访问类的私有成员,包括成员函数、数据成员
正确答案:AD
判断题 (1分)
语句 auto m = 49990; 定义的变量m是int类型的。
正确答案:
判断题 (1分)
auto name = "OOP";定义的变量是string类型
正确答案:×
单选题 (1分)
关于左值引用,下列用法或叙述不正确的是:
A.引用可以先定义,再赋值
B.引用可以作为函数参数
C.函数可以返回引用
D.引用是另一个有名字变量的别名
正确答案:A
多选题 (2分)
关于右值引用,以下叙述正确的是
A.右值引用可以用来引用临时变量
B.右值引用不能用作函数的参数
C.右值引用不能用作函数返回值
D.右值引用可以用表达式来赋值
正确答案:AD
多选题 (2分)
下列关于new/delete的叙述,正确的是:
A.new, delete都是操作符,用来在运行时分配内存
B.作为良好习惯,程序中通过new分配的内存,在程序退出时要用delete释放
C.如果是动态数组,需要使用delete[] 来释放
D.分配单个变量内存时,可以同时进行赋值,如 int* ptr = new int(45);
正确答案:BCD
判断题 (1分)
int a; decltype(a) b; 与 int a, b; 的结果是一样的
正确答案:
作业三
单选题 (1分)
以下程序片段中的第2条语句调用了类的什么函数? classA obj1; classA obj2 = obj1;
A.缺省构造函数
B.赋值运算符重载函数
C.拷贝构造函数
D.析构函数
正确答案:C
判断题 (1分)
在定义类时,嵌套包含用其他类声明的对象是不行的,因为在类中只能包含基本数据类型定义的变量作为数据成员。
正确答案:×
多选题 (2分)
以下哪些运算符是可以重载的?
A.流运算符
B.赋值运算符
C.函数运算符
D.数组下标运算符
正确答案:ABCD
判断题 (1分)
在函数传值参和返回值时,通常会发生拷贝构造函数调用
正确答案:
判断题 (1分)
第3.8节的示例说明,使用移动构造函数可以提高内存资源的利用效率,从而改进程序的执行性能。
正确答案:
填空题 (1分)
为了看到移动拷贝构造函数的效果,除了要使用C++2011以上的版本编译链接源程序外,还需要打开一个编译选项,它是____
正确答案:-fno-elide-constructors
单选题 (1分)
设FastFilter是用户自定义的类,若要求使用cout来输出该类的对象,则以下哪条语句应加入到FastFilter类的声明中?
A.第1句
B.第2句
C.第3句
D.第4句
正确答案:D
作业四
多选题 (2分)
关于派生类重写基类函数,下列哪些说法是正确的
A.基类函数中重载函数将被屏蔽,不能被调用
B.编译出错
C.可以在派生类中用using指令恢复基类成员函数
D.如果派生类的成员函数只是名称跟基类中定义的成员一样,返回类型和参数均不相同,则不属于重写
正确答案:ACD
多选题 (2分)
要实现不同类之间转换,下列哪种方法是可行的
A.在源类中定义转换运算符
B.在目的类中定义以源类对象为参数的构造函数
C.总是使用static_cast转换
D.总是使用dynamic_cast转换
正确答案:AB
多选题 (2分)
以下哪些属于C++支持的模板类型?
A.类模板
B.函数模板
C.成员函数模板
D.标准模板库模板
正确答案:ABC
单选题 (1分)
关于虚函数的说法正确的是
A.派生类中定义基类定义的虚函数时,也必须写virtual
B.指向派生类的基类指针若调用虚函数,则实际执行的是派生类的函数定义
C.以=0修饰的虚函数不允许带有参数
D.虚函数不能在类中进行函数定义
正确答案:B
多选题 (2分)
关于继承,下列哪些说法是正确的
A.一个类可以继承多个类
B.继承的层次不能超过3层
C.基类中声明的数据成员会包含在派生类对象中
D.继承是代码复用的手段之一
正确答案:ACD
判断题 (1分)
对模板进行特化,是因为存在一些特殊情形不能使用模板来处理。
正确答案:√
判断题 (1分)
若类模板有多个模板参数,则可以特化其中一部分
正确答案:√
判断题 (1分)
函数模板在使用时,有时候看上去跟函数重载一样
正确答案:√
判断题 (1分)
若模板有多个类型参数,可以为它们中的一部分提供缺省参数
正确答案:√
判断题 (1分)
使用模板编程,也能实现代码多态
正确答案:√
判断题 (1分)
当模板完全特化时,模板名后面的<>可以省略掉
正确答案
判断题 (1分)
派生类的成员函数可以调用基类的所有成员函数。
正确答案
判断题 (1分)
派生类的任意成员函数都能访问从基类继承来的所有数据成员。
正确答案
单选题 (1分)
若希望一个类不能定义对象,可以通过下面的办法来做到
A.不为该类定义构造函数
B.不为该类定义析构函数
C.为该类定义纯虚函数
D.将构造函数用delete修饰
正确答案:C
作业五
多选题 (2分)
面向对象程序设计有什么作用?
A.帮助程序设计起来更方便
B.使得程序的维护修改更容易
C.提高生活中到对象的可能性
D.增强程序应对变化的能力
正确答案:ABD
填空题 (2分)
在课程的电子计价器实例中,我们可以发现站在卖家的立场上,把____(经常变化/不常变化)的applePrice和bananaPrice“封装”起来,形成Caculator这个概念,使用Calculator时把____(经常变化/不常变化)的重量作为参数。
正确答案:不常变化  经常变化
单选题 (1分)
怎么让状态附加到函数里?
A.继承
B.封装
C.抽象
D.多态
正确答案:B
填空题 (3分)
通过抽象出“抽象概念”,设计出描述这个抽象概念的____或称为“____”
,这个类有一系列的(纯)虚函数,描述了这个类的“____”。
正确答案:抽象类  接口类  接口
作业六
填空题 (1分)
如果几组函数接口的实现互相独立,分别有N,M,K种实现方法,那么,实现子类的个数将是____种。
正确答案:N*M*K
填空题 (1分)
将多个不同的功能交由同一个类实现,违反了____原则。
正确答案:单一责任
单选题 (1分)
把抽象部分与实现部分分离,使它们都可以独立变化的模式叫作()。
A.分离模式
B.工厂模式
C.Bridge模式
D.独立模式
正确答案:C
作业七
单选题 (1分)
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示的模式称为()。
A.迭代器模式
B.访问者模式
C.观察者模式
D.顺序模式
正确答案:A
多选题 (2分)
在迭代器模式的案例中非常好地体现了“变”与“不变”的关系,请问以下选项中哪些体现了“不变”?
A.产生迭代器的方法
B.集合的存储方式
C.迭代器遍历集合的接口
D.迭代器遍历集合的具体实现
正确答案:AC
填空题 (1分)
我们可以使用____技术实现泛型。
正确答案:模板
填空题 (1分)
____的作用是函数内联展开,避免函数调用开销;用空间换时间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。