南开大学20秋《面向对象程序设计》在线作业1参考答案.docx
《南开大学20秋《面向对象程序设计》在线作业1参考答案.docx》由会员分享,可在线阅读,更多相关《南开大学20秋《面向对象程序设计》在线作业1参考答案.docx(11页珍藏版)》请在冰豆网上搜索。

南开大学20秋《面向对象程序设计》在线作业1参考答案
1.如果类A被说明成类B的友元,则()。
A.类A的成员函数不得访问类B的所有成员
B.类A的成员函数可以访问类B的所有成员
C.类A的成员即类B的成员
D.类B的成员即类A的成员
答案:
B
2.已知“inta=10;int&r=a;r=r+20;couta;”,则输出为()。
A.10
B.20
C.30
D.不确定值
答案:
C
3.类模板的模板参数()。
A.只可作为数据成员的类型
B.只可作为成员函数的返回类型
C.只可作为成员函数的参数类型
D.以上三者皆可
答案:
D
4.下面描述中,错误的是()。
A.在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B.在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
C.在基类定义的public和protected成员在保护继承的派生类中可见
D.在派生类中不可见的成员要变成可访问的,需要进行访问声明
答案:
B
5.下列表示引用的方法中,()是正确的。
已知:
intk=1000
A.int&x=k
B.char&y
C.int&z=1000
D.float&t=&k
答案:
A
6.下列关于构造函数说法不正确的是()。
A.构造函数必须与类同名
B.构造函数可以省略不写
C.构造函数必须有返回值
D.在构造函数中可以对类中的成员进行初始化
答案:
C
7.若类A和类B的定义如下:
classA{inti,j;public:
voidget();};classB:
A//默认为私有派生{intk;public;voidmake();};voidB:
:
make(){k=i*j;}则上述定义中,()是非法的表达式。
A.voidget()
B.intk
C.voidmake()
D.k=i*j
答案:
D
8.抽象类的作用主要是()。
A.直接用作基类
B.直接用作指针
C.引用的基类型
D.包括以上各项
答案:
D
9.进行文件操作时需要包含()头文件。
A.iostream
B.fstream
C.stdio
D.stdlib
答案:
B
10.运算符delete删除一个动态对象时()。
A.首先为该动态对象调用构造函数,再释放其占用的内存
B.首先释放该动态对象占用的内存,再为其调用构造函数
C.首先为该动态对象调用析构函数,再释放其占用的内存
D.首先释放动态对象占用的内存,再为其调用析构函数
答案:
C
11.已知“inta=10,b=8;int&r=a;r=b;couta”,“b”,“r;”,则输出为()。
A.10,8,10
B.10,8,8
C.8,8,10
D.8,8,8
答案:
D
12.在C++中,类与类之间的继承关系具有()。
A.自反性
B.对称性
C.传递性
D.反对称性
答案:
C
13.一个类的友元函数能够访问该类的()。
A.私有成员
B.保护成员
C.公有成员
D.所有成员
答案:
D
14.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的()。
A.public成员
B.private成员
C.protected成员
D.友元
答案:
A
15.下面程序段中是内联函数的是()。
classlocation{private:
intx,y;public:
voidinit(intinitx,intinity){x=initx;y=inity;}intgetx(){returnx;}intgety();};inlineintlocation:
:
gety(){returny;}
A.init(intinitx,intinity)
B.getx(),gety()
C.A和B都是
D.A和getx()
答案:
C
16.已知X类中的一个成员函数说明如下:
voidSet(X*a);其中,X*a的含义是()。
A.a是指向X类对象的指针,用来作为Set()的形参
B.将X*a的计算结果传递给Set()函数
C.a是X类对象的引用,用来做为Set()的形参
D.以上都不对
答案:
A
17.在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。
A.assign
B.insert
C.swap
D.find
答案:
D
18.已知AA是一个类,则执行语句AAa;后()。
A.自动调用无参构造函数
B.自动调用有参构造函数
C.自动调用拷贝构造函数
D.产生一个对象a,但不调用任何函数
答案:
A
19.下面说法正确的是()。
A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义
D.类的内联函数必须在类体外用关键字inline定义
答案:
B
20.要求打开文件d:
\\file.dat,可写入数据,正确的语句是()。
A.ifstreaminfile(“d:
\file.dat”,ios:
:
in)
B.ifstreaminfile(“d:
\\file.dat”,ios:
:
in)
C.ofstreaminfile(“d:
\file.dat”,ios:
:
out)
D.fstreaminfile(“d:
\\file.dat”,ios:
:
in|ios:
:
out)
答案:
D
21.程序在调用重载函数时,根据()区分到底要调用哪个函数?
A.函数名
B.返回值类型
C.参数个数和类型
D.以上都可以
答案:
C
22.假定MyClass为一类,执行MyClassa,b
(2),*p[2];语句时会自动调用该类构造函数()次。
A.2
B.3
C.4
D.5
答案:
A
23.关于函数的描述中,()是正确的。
A.派生类的虚函数与基类的虚函数具有不同的参数个数和类型
B.基类中说明了虚函数后,派生类中其对应的函数一定要说明为虚函数
C.虚函数是一个成员函数
D.虚函数是一个static类型的成员函数
答案:
C
24.友元访问类对象的成员时使用()。
A.类的成员名
B.“this-成员名”的形式
C.“类名:
:
成员名”的形式
D.“对象名.成员名”的形式
答案:
D
25.下列关于主函数的叙述中正确的是()。
A.一个程序可以有多个主函数
B.程序从主函数开始执行
C.一个程序可以没有主函数
D.主函数是一个特殊的函数,因此其结构与其他函数不同
答案:
B
26.包含类fstream定义的头文件是()。
A.fstream
B.ofstream
C.ifstream
D.iostream
答案:
A
27.下列程序段中具有相同值的是()。
classBase{intb;};classBase1:
virtualpublicbase{intb1;};classBase2:
virtualpublicbase{intb2;};classderived:
publicbase1,base2{intb3;};derivedd
A.d.b与d.base1:
:
b
B.d.base1:
:
b与d.base1:
:
b1
C.d.b与d.b3
D.d.base2:
:
b与d.base2:
:
b2
答案:
A
28.关于多继承二义性的描述中,错误的是()。
A.一个派生类的基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性
B.解决二义性的最常用的方法是对成员名的限定法
C.基类和派生类同时出现的同名函数,也存在二义性问题
D.一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性
答案:
C
29.关于下面程序段说法正确的是:
()classX(private:
intn;public:
X(X&);};X:
:
X(X&x){n=x.n}Xobj1,obj2(obj1)
A.语句obj2(obj1);的功能是用对象obj1初始化具有相同类类型的对象obj2
B.语句obj2(obj1);的功能是用对象obj2初始化具有相同类类型的对象obj1
C.X(X&x)中的&符号可以删除
D.X(X&x)函数中不能访问对象的私有成员
答案:
A
30.在下列关键字中,用以说明类中公有成员的是()。
A.public
B.private
C.protected
D.friend
答案:
A
31.在类的定义形式中,数据成员、成员函数和()组成了类定义体。
A.成员的访问控制信息
B.公有信息
C.私有信息
D.保护信息
答案:
A
32.下列关于成员函数特征的描述中,错误的是()。
A.成员函数可以重载
B.成员函数一定是内联函数
C.成员函数可以设置参数的默认值
D.成员函数可以是静态的
答案:
B
33.有下面类的说明,有错误的语句是()。
ClassX{A.inta=2;B.X();public:
C.X(intval);D.~X();}
A.A
B.B
C.C
D.D
答案:
A
34.read函数的功能是从输入流中读取()。
A.一个字符
B.当前字符
C.一行字符
D.指定若干个字符
答案:
D
35.在C++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。
A.继承
B.封装
C.多态
D.重载
答案:
A
36.C语言中scanf命令在c++中改用cin。
()
A.正确
B.错误
答案:
A
37.使用打开文件函数open()之前,需要定义一个流类对象,使用open()函数来操作该对象。
()
A.正确
B.错误
答案:
A
38.类A有如下成员函数:
intA:
:
fun(doublex){return(int)x/2;}intA:
:
fun(intx){returnx*2;}设a为类A的对象,在主函数中执行语句ints=a.fun(6.0)+a.fun
(2)后的s值为7。
()
A.正确
B.错误
答案:
A
39.在面向对象程序设计中,每个对象可以单独设置属性值。
()
A.正确
B.错误
答案:
A
40.在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。
()
A.正确
B.错误
答案:
B
41.假定类AB中有一个公用属性的静态数据成员staticintbb;在类外不通过对象名给该成员bb赋值为10的写法为staticintAB:
:
bb=10。
()
A.正确
B.错误
答案:
B
42.类的常量成员函数中只能使用常量数据成员。
()
A.正确
B.错误
答案:
B
43.定义虚函数所用的关键字是virtual。
()
A.正确
B.错误
答案:
A
44.在保护继承中,对于派生类的访问同于公有继承,而对于派生类的对象的访问同于私有继承。
()
A.正确
B.错误
答案:
A
45.派生类是从基类派生出来,它不能再生成新的派生类。
()
A.正确
B.错误
答案:
B
46.运算符重载可以改变运算符的优先级。
()
A.正确
B.错误
答案:
B
47.假定AB为一个类,有类AB的两个对象a1,a2;则执行语句AB*a[10]={&a1,&a2};时系统自动调用该类的构造函数的次数为2。
()
A.正确
B.错误
答案:
B
48.面向对象的英文缩写是OOP。
()
A.正确
B.错误
答案:
A
49.一个抽象类的派生类可以用于创建对象。
()
A.正确
B.错误
答案:
B
50.假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为~AB(){}。
()
A.正确
B.错误
答案:
A