南开16春《面向对象程序设计》在线作业
南开16春《面向对象程序设计》在线作业一、单选题:
1.下列关于动态联编的描述中,错误的是( )。 (满分:2)
A. 动态联编是以虚函数为基础的
B. 动态联编是在运行时确定所调用的函数代码的
C. 动态联编调用函数操作是通过指向对象的指针或对象
D. 动态联编是在编译时确定操作函数的
2.下面关于构造函数和析构函数的描述,错误的是( )。 (满分:2)
A. 析构函数中调用虚函数采用静态联编
B. 对虚析构函数的调用可以采用动态联编
C. 当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数
D. 构造函数可以声明为虚函数
3.结构化程序设计方法以( )为中心进行分析和设计。 (满分:2)
A. 结构
B. 模块
C. 对象
D. 类
4.如果一个类至少有一个纯虚函数,那么就称该类是( )。 (满分:2)
A. 抽象类
B. 虚基类
C. 派生类
D. 以上都不对
5.下面对静态数据成员的描述中,正确的是( )。 (满分:2)
A. 静态数据成员可以在类体内进行初始化
B. 静态数据成员不可以被该类的对象调用
C. 静态数据成员不能受private控制符的作用
D. 静态数据成员可以直接用类名访问
6.下列关于继承的描述中,错误的是( )。 (满分:2)
A. 基类中的析构函数不能被派生类继承
B. 基类中的保护成员在派生类中无法直接访问
C. 派生类的成员除了包括派生类中自己定义的成员外,还包括它从基类继承的成员
D. 在公有继承方式下基类中公有成员和保护成员的访问权限到派生类保持不变
7.“#include ”是( )预处理命令。 (满分:2)
A. 宏定义
B. 文件包含
C. 条件编译
D. 工程配置
8.使用string类,必须在程序中包含头文件( )。 (满分:2)
A. string.h
B. string
C. cstring.h
D. cstring
9.多继承的构造函数顺序可分为如下4步:①所有非虚基类的构造函数按照它们被继承的顺序构造。②所有虚基类的构造函数按照它们被继承的顺序构造。③所有子对象的构造函数按照它们声明的顺序构造。④派生类自己的构造函数体这四个步骤的正确顺序是( )。 (满分:2)
A. ④③①②
B. ②④③①
C. ②①③④
D. ③④①②
10.抽象类不能定义对象,但可以声明抽象类的( )。 (满分:2)
A. 指针或引用
B. 函数返回类型
C. 显式转换
D. 以上都是
11.下列虚基类的声明中,正确的是( )。 (满分:2)
A. class virtual B
12.已知“int a=10;int &r=a; r=r+20;cout<<a;”,则输出为( )。 (满分:2)
public A
B. virtual class B
13.已知“int a=10,b=8;int &r=a; r=b;cout<<a<<","<<b<<","<<r;”,则输出为( )。 (满分:2)
public A
C. class B
14.执行语句“string str("abc");”时,系统会自动调用string类的构造函数( )。 (满分:2)
public A virtual
D. class B
15.下面描述中,错误的是( )。 (满分:2)
virtual public A
16.有关重载函数的描述正确的是( )。 (满分:2)
A. 10
B. 20
C. 30
D. 不确定值
17.以下为重载函数的一组函数声明的是( )。 (满分:2)
A. 10
8
10
B. 10
8
8
C. 8
8
10
D. 8
8
8
18.对A、B两个类进行多重继承得到派生类C,则创建派生类C的对象时,从基类B中继承过来的成员变量由( )类的构造函数进行初始化。 (满分:2)
A. string( )
B. string(const char *s)
C. string(const string &str)
D. string(sizetype n
char c)
19.运算符重载的目的是( )。 (满分:2)
A. 公有继承时,基类中的public成员在派生类中仍是public的
B. 公有继承时,基类中的private成员在派生类中仍是private的
C. 公有继承时,基类中的protected成员在派生类中仍是protected的
D. 私有继承时,基类中的public成员在派生类中是private的
20.要在类对象上使用运算符,以下不用必须被重载的运算符是( )。 (满分:2)
A. 函数名相同的函数就是重载函数
B. 函数名相同但返回值类型不同的函数就是重载函数
C. 函数名相同但参数个数或类型不同的函数就是重载函数
D. 函数功能相同的函数就是重载函数
21.关于纯虚函数和抽象类的描述中,错误的是( )。 (满分:2)
A. void print(int);void print(double);
B. void fun(int); int fun(int);
C. int max(int
int);int min(int
int);
D. void mm( ); int mm( );
22.对于拷贝构造函数,正确的描述是( )。 (满分:2)
A. A
B. B
C. C
D. 都可以
23.下列关于赋值运算符重载的说法中正确的是( )。 (满分:2)
A. 提高程序的效率
B. 提高代码复用能力
C. 简化程序,减少目标代码
D. 使程序代码直观易读
24.友元重载运算符obj1>obj2被C++编译器解释为( )。 (满分:2)
A. [ ]
B. =
C. ++
D. --
25.下列关于类和对象的叙述中,错误的是( )。 (满分:2)
A. 纯虚函数是一种特殊的虚函数,它没有具体的实现。
B. 抽象类是指具有纯虚函数的类。
C. 一个基类中有纯虚函数,该类的派生类一定不再是抽象类。
D. 抽象类作为基类来使用,其纯虚函数的实现由派生类给出。
26.下列关于拷贝构造函数的描述中,错误的是( )。 (满分:2)
A. 在C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
B. 必须为每个类定义拷贝构造函数
C. 如果要使用拷贝构造函数,则必须在类中先定义
D. 当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
27.有如下类声明: class Sample { int x; }; 则Sample类成员x是Sample类的( )。 (满分:2)
A. 返回值一般是以引用方式返回的对象,而函数体中总是用语句“return *this;”返回this指针所指向的对象
B. 赋值运算符只能以非成员函数的方式重载
C. 赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载
D. 以上均不正确
28.已知“float *p; p=new float;”,若要释放p所指向的堆中的这些字节,下列语句正确的是( )。 (满分:2)
A. operator>(obj1
obj2)
B. >(obj1
obj2)
C. obj1.operator>(obj2)
D. obj2.operator>(obj1)
29.在派生类中重新定义虚函数时,除了( ),其他方面都应与基类中相应的虚函数保持一致。 (满分:2)
A. 一个类只能有一个对象
B. 对象是类的具体实例
C. 类是某一类对象的抽象
D. 类和对象的关系是一种数据类型与变量的关系
30.有关带默认参数的函数的描述正确的是( )。 (满分:2)
A. 一个类可以定义多个拷贝构造函数
B. 若未定义拷贝构造函数,则系统会提供一个默认拷贝构造函数
C. 当类中有指针成员变量时,通常要为这个类定义一个拷贝构造函数来实现深拷贝
D. 拷贝构造函数中的参数按引用方式传递
31.在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是( )。 (满分:2)
A. 公有数据成员
B. 保护数据成员
C. 私有数据成员
D. 以上选项都不正确
32.下列对派生类的描述中错误的是( )。 (满分:2)
A. delete p;
B. delete p[];
C. delete []p;
D. delete p;
33.类MyClass的定义如下:class MyClass{public: MyClass( ) { value = 0;} SetVariable(int i) { value = i; }private: int value;}则对下列语句序列正确的描述是( )。 MyClass *p,my;p=&my; (满分:2)
A. 函数名
B. 参数
C. 函数体
D. 返回值类型
34.下列运算符中,( )在C++中不能重载。 (满分:2)
A. 只能在函数定义时设置默认参数值
B. 只能在函数声明时设置默认参数值
C. 函数调用时,必须使用默认的参数值,不能给出新的实参值
D. 设置默认参数时,应该设置最右边的若干个参数的默认值
35.已知函数原型:void f(int a, int b=3,char c='*'); 则下面的函数调用中,不合法的调用是( )。 (满分:2)
A. operator+有两个参数,operator*有两个参数
B. operator+有两个参数,operator*有一个参数
C. operator+有一个参数,operator*有两个参数
D. operator+有一个参数,operator*有一个参数
三、判断题:
1.抽象类虽然也是一种数据类型,但它不能建立对象,只能作为基类被其他类继承。 (满分:2)
A. 派生类至少有一个基类
B. 派生类可作为另一个派生类的基类
C. 派生类除了包含它直接定义的成员外,还包含其基类的成员
D. 派生类对其继承的基类的成员访问权限保持不变
2.a为MyClass类对象,“static void SetRate(double r){...}”是MyClass类的静态成员函数,则执行语句“a.SetRate(0.05);”时,SetRate成员函数中的this指针指向对象a的地址。 (满分:2)
A. 语句p=&my;是把对象my赋值给指针变量p
B. 语句MyClass *p,my;会调用两次类MyClass的构造函数
C. 对语句 *p.SetVariable(5)的调用是正确的
D. 语句p->SetVariable(5)与语句my.SetVariable(5)等价
3.抽象类不能定义对象,但可以声明抽象类的指针或引用。 (满分:2)
A. ?
4.一个类的静态数据成员被该类的所有对象共享。 (满分:2)
B. +
C. -
D. <=
5.在C++中,可以声明虚构造函数和虚析构函数。 (满分:2)
A. f(5)
B. f(5
8)
C. f(6
'#')
D. f(0
0
'#')
6.在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。 (满分:2)
A. 错误
B. 正确
7.类中所提供的成员函数可以直接访问该类的私有成员。 (满分:2)
A. 错误
B. 正确
8.在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。 (满分:2)
A. 错误
B. 正确
9.在C++程序中,有且仅能有一个主函数,且其函数名必须是main。 (满分:2)
A. 错误
B. 正确
10.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:AB operator+(AB &,AB &); (满分:2)
A. 错误 B. 正确
11.C++语言类定义中默认的访问权限是public。 (满分:2)
A. 错误 B. 正确
12.在C++中,允许从一个类派生出任意多个类,但不允许某个类同时从多个类派生。 (满分:2)
A. 错误
B. 正确
13.定义一个虚基类后,则该虚基类后继类层次中的类都需要调用虚基类的构造函数对虚基类中定义的成员变量进行初始化。 (满分:2)
A. 错误
B. 正确
14.要使语句“MyClass a;”能够编译通过,必须在定义MyClass类时编写无参构造函数。 (满分:2)
A. 错误
B. 正确
15.构造函数不能被派生类继承。 (满分:2)
A. 错误
B. 正确
**** Hidden Message *****
页:
[1]