南开17春秋学期《面向对象程序设计》在线作业Word文件下载.docx
《南开17春秋学期《面向对象程序设计》在线作业Word文件下载.docx》由会员分享,可在线阅读,更多相关《南开17春秋学期《面向对象程序设计》在线作业Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
.?
:
.+
.-
.<
=
8.以成员函数方式重载运算符“>
”,则oj1>
oj2被++编译器解释为()。
.oprtor>
(oj1,oj2)
.>
.oj1.oprtor>
(oj2)
.oj2.oprtor>
(oj1)
9.下列关于虚函数的说明中,正确的是()。
.从虚基类继承的函数都是虚函数
.虚函数不得是静态成员函数
.只能通过指针或引用调用虚函数
.抽象类中的成员函数都是虚函数
10.下列关于主函数的叙述中正确的是()。
.一个程序可以有多个主函数
.程序从主函数开始执行
.一个程序可以没有主函数
.主函数是一个特殊的函数,因此其结构与其他函数不同
11.派生类中的成员不能访问基类中的()。
.私有成员
.公有成员
.保护成员
.以上都可以
12.如果一个类至少有一个纯虚函数,那么就称该类是()。
.抽象类
.虚基类
.派生类
.以上都不对
13.假定Mylss为一类,执行Mylss,
(2),*p[2];
语句时会自动调用该类构造函数()次。
.2
.3
.4
.5
14.友元重载运算符oj1>
15.在保护继承中,基类中的私有成员作为派生类的()。
.不可访问
16.抽象类的作用主要是()。
.直接用作基类
.直接用作指针
.引用的基类型
.包括以上各项
17.有如下类声明:
lssSmpl{intx;
};
则Smpl类成员x是Smpl类的()。
.公有数据成员
.保护数据成员
.私有数据成员
.以上选项都不正确
18.变量的引用,其含义是指该变量的()。
.值
.类型
.别名
.地址
19.有关重载函数的描述正确的是()。
.函数名相同的函数就是重载函数
.函数名相同但返回值类型不同的函数就是重载函数
.函数名相同但参数个数或类型不同的函数就是重载函数
.函数功能相同的函数就是重载函数
20.如果类被说明成类的友元,则()。
.类的成员函数不得访问类的所有成员
.类的成员函数可以访问类的所有成员
.类的成员即类的成员
21.已知“flot*p;
p=nwflot[2];
”,若分配成功,则指针p在堆中获得的字节数为()。
.8
.不确定
22.下列关于构造函数调用顺序的描述中,正确的是()。
.创建派生类对象时,先调用基类的构造函数,后调用派生类的构造函数
.创建基类对象时,先调用基类的构造函数,后调用派生类的构造函数
.创建派生类对象时,先调用派生类的构造函数,后调用基类的构造函数
.创建基类对象时,先调用派生类的构造函数,后调用基类的构造函数
23.已知“int=10,*p;
int*&
r=p;
r=&
;
*p=20;
out<
<
”,则输出为()。
.10
.20
.不确定值
.程序有错误
24.运行以下程序时,如果由键盘输入6514,则输出结果是()。
#inlu<
iostrm>
usingnmspst;
intmin(){intm,n;
out<
"
Inputm,n:
in>
>
m>
n;
whil(m!
=n){whil(m>
n)m-=n;
whil(n>
m)n-=m;
}out<
m<
nl;
rturn0;
}
.1
.0
25.在一个类中,可以对一个操作符进行()重载。
.1种
.2种
.3种
.多种
26.下列关于运算符重载的描述中,正确的是()。
.运算符重载可以改变操作数的个数
.运算符重载可以改变运算符的优先级
.运算符重载可以改变运算符的结合性
.运算符重载可以使运算符实现特殊功能
27.运算符重载的目的是()。
.提高程序的效率
.提高代码复用能力
.简化程序,减少目标代码
.使程序代码直观易读
28.下面对静态数据成员的描述中,正确的是()。
.静态数据成员可以在类体内进行初始化
.静态数据成员不可以被该类的对象调用
.静态数据成员不能受privt控制符的作用
.静态数据成员可以直接用类名访问
29.已知“flot*p;
”,若要释放p所指向的堆中的这些字节,下列语句正确的是()。
.ltp;
.ltp[];
.lt[]p;
.ltp[2];
30.下面叙述中错误的是()。
.派生类可以使用privt派生
.对基类成员的访问必须是无二义性的
.基类成员的访问能力在派生类中维持不变
.赋值兼容规则也适用于多继承的组合
31.下列对派生类的描述中错误的是()。
.派生类至少有一个基类
.派生类可作为另一个派生类的基类
.派生类除了包含它直接定义的成员外,还包含其基类的成员
.派生类对其继承的基类的成员访问权限保持不变
32.结构化程序设计方法以()为中心进行分析和设计。
.结构
.模块
.对象
.类
33.类的默认的无参构造函数()。
.在任何情况下都存在
.仅当未定义无参构造函数时存在
.仅当未定义有参构造函数时存在
.仅当未定义任何构造函数时存在
34.对于拷贝构造函数,正确的描述是()。
.在++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
.必须为每个类定义拷贝构造函数
.如果要使用拷贝构造函数,则必须在类中先定义
.当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
35.在一个++源文件中使用了in和out,那么在这个源文件中必须包含()文件。
.iostrm
.fstrm
.stio.h
.stli.h
二、判断题(共15道试题,共30分。
)v1.类中所提供的成员函数可以直接访问该类的私有成员。
.错误
.正确
2.对虚函数的调用,系统都是采用动态联编。
3.派生类至少有一个基类。
4.在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。
5.在++中,可以声明虚构造函数和虚析构函数。
6.私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。
7.为Mylss类对象,“sttivoiStRt(oulr){...}”是Mylss类的静态成员函数,则执行语句“.StRt(0.05);
”时,StRt成员函数中的this指针指向对象的地址。
8.基类类型的指针可以指向其派生类对象。
9.在派生类对象销毁时,系统除了会自动调用派生类的析构函数,还会自动调用基类的析构函数。
10.定义一个虚基类后,则该虚基类后继类层次中的类都需要调用虚基类的构造函数对虚基类中定义的成员变量进行初始化。
11.一个类的静态数据成员被该类的所有对象共享。
12.要使语句“Mylss;
”能够编译通过,必须在定义Mylss类时编写无参构造函数。
13.在++程序中,有且仅能有一个主函数,且其函数名必须是min。
14.以友元方式重载运算符时,形参列表中至少有一个参数必须是自定义数据类型。
15.++语言类定义中默认的访问权限是puli。
)v1.已知“int=10,=8;
int&
r=;
r=;
"
r;
.10,8,10
.10,8,8
.8,8,10
.8,8,8
2.抽象类的作用主要是()。
3.将一个函数声明为某类的友元函数后,则在函数中不可以直接访问该类的()。
.都可访问
4.下列对派生类的描述中错误的是()。
6.“#inlu<
”是()预处理命令。
.宏定义
.文件包含
.条件编译
.工程配置
7.已知“flot*p;
8.下列关于构造函数说法不正确的是()。
.构造函数必须与类同名
.构造函数可以省略不写
.构造函数必须有返回值
.在构造函数中可以对类中的成员进行初始化
9.下列关于拷贝构造函数的描述中,错误的是()。
.一个类可以定义多个拷贝构造函数
.若未定义拷贝构造函数,则系统会提供一个默认拷贝构造函数
.当类中有指针成员变量时,通常要为这个类定义一个拷贝构造函数来实现深拷贝
.拷贝构造函数中的参数按引用方式传递
10.在一个string类对象表示的字符串中插入新字符,应该使用string类的()函数。
.ssign
.insrt
.swp
.fin
11.下列关于构造函数调用顺序的描述中,正确的是()。
12.假设堆内存分配均成功,则下面程序段完全正确的是()。
.int*p=nwint(3);
*p;
ltp;
.int*p=nwint[5]={1,2,3,4,5};
for(inti=0;
i<
5;
i++)out<
p[i];
lt[]p;
.int*p=nwint[5];
i++,p++){*p=i;
}lt[]p;
.以上程序段均正确
13.任意一个类,析构函数的个数最多是()。
.不限个数
14.将一个string类对象赋予新值,应该使用string类的()函数。
15.下列关于继承的描述中,错误的是()。
.基类中的析构函数不能被派生类继承
.基类中的保护成员在派生类中无法直接访问
.派生类的成员除了包括派生类中自己定义的成员外,还包括它从基类继承的成员
.在公有继承方式下基类中公有成员和保护成员的访问权限到派生类保持不变
16.有如下类声明:
17.在一个++源文件中使用了in和out,那么在这个源文件中必须包含()文件。
18.在使用类创建对象时,系统会自动调用该对象的()完成对象中数据成员的初始化等操作。
.虚函数
19.已知“int=10,*p;
20.关于纯虚函数和抽象类的描述中,错误的是()。
.纯虚函数是一种特殊的虚函数,它没有具体的实现。
.抽象类是指具有纯虚函数的类。
.一个基类中有纯虚函数,该类的派生类一定不再是抽象类。
.抽象类作为基类来使用,其纯虚函数的实现由派生类给出。
21.执行语句“stringstr("
”时,系统会自动调用string类的构造函数()。
.string()
.string(onsthr*s)
.string(onststring&
str)
.string(siz_typn,hr)
22.抽象类不能定义对象,但可以声明抽象类的()。
.指针或引用
.函数返回类型
.显式转换
.以上都是
23.程序在调用重载函数时,根据()区分到底要调用哪个函数。
.函数名
.返回值类型
.参数个数和类型
24.在++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。
.继承
.封装
.多态
.重载
25.在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
26.友元重载运算符oj1>
27.类的默认的无参构造函数()。
28.变量的引用,其含义是指该变量的()。
29.要在类对象上使用运算符,以下不用必须被重载的运算符是()。
.[]
.=
.++
.--
30.派生类中的成员不能访问基类中的()。
31.使用string类,必须在程序中包含头文件()。
32.以下为重载函数的一组函数声明的是()。
.voiprint(int);
voiprint(oul);
.voifun(int);
intfun(int);
.intmx(int,int);
intmin(int,int);
.voimm();
intmm();
33.下列关于类和对象的叙述中,错误的是()。
.一个类只能有一个对象
.对象是类的具体实例
.类是某一类对象的抽象
.类和对象的关系是一种数据类型与变量的关系
34.对、两个类进行多重继承得到派生类,则创建派生类的对象时,从基类中继承过来的成员变量由()类的构造函数进行初始化。
.
.都可以
35.下列虚基类的声明中,正确的是()。
.lssvirtul:
puli
.virtullss:
.lss:
pulivirtul
virtulpuli
)v1.++语言类定义中默认的访问权限是puli。
2.在派生类对象销毁时,系统除了会自动调用派生类的析构函数,还会自动调用基类的析构函数。
3.基类类型的指针可以指向其派生类对象。
4.假定要对类定义加号操作符重载成员函数,实现两个类对象的加法,并返回相加结果,则该成员函数的声明语句为:
oprtor+(&
&
5.在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。
6.在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。
7.类中所提供的成员函数可以直接访问该类的私有成员。
8.为Mylss类对象,“sttivoiStRt(oulr){...}”是Mylss类的静态成员函数,则执行语句“.StRt(0.05);
9.在++中,允许从一个类派生出任意多个类,但不允许某个类同时从多个类派生。
10.对虚函数的调用,系统都是采用动态联编。
11.抽象类不能定义对象,但可以声明抽象类的指针或引用。
12.一个类的静态数据成员被该类的所有对象共享。
13.私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。
15.定义一个虚基类后,则该虚基类后继类层次中的类都需要调用虚基类的构造函数对虚基类中定义的成员变量进行初始化。
)v1.交换两个string类对象所表示的字符串的内容,应该使用string类的()函数。
2.若类中有指针成员变量,则应编写(),使得在对象销毁时能够自动调用该函数释放指针成员变量所指向的内存空间。
3.要在类对象上使用运算符,以下不用必须被重载的运算符是()。
4.下面关于类的成员函数描述不正确的是()。
.静态成员函数内可以直接访问类的非静态成员数据
.静态成员函数内可以直接访问类的静态成员数据
.非静态成员函数可以直接访问类的非静态成员数据
.非静态成员函数可以直接访问类的静态成员数据
5.已知“flot*p;
6.程序在调用重载函数时,根据()区分到底要调用哪个函数。
7.任意一个类,析构函数的个数最多是()。
8.下列关于赋值运算符重载的说法中正确的是()。
.返回值一般是以引用方式返回的对象,而函数体中总是用语句“rturn*this;
”返回this指针所指向的对象
.赋值运算符只能以非成员函数的方式重载
.赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载
.以上均不正确
9.在一个++源文件中使用了in和out,那么在这个源文件中必须包含()文件。
10.类lss的定义如下:
lsslss{puli:
ls