南开20春学期(1709、1803、1809、1903、1909、2003)《面向对象程序设计》在线作业[答案]满分答案
20春学期(1709、1803、1809、1903、1909、2003)《面向对象程序设计》在线作业
试卷总分:100 得分:100
一、单选题 (共 35 道试题,共 70 分)
1.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则()。
A.部分相同,部分不同
B.完全相同
C.完全不同
D.以上都不对
2.下面( )的叙述不符合赋值兼容规则。
A.派生类的对象的地址可以赋值给指向基类的指针
B.派生类的对象可以赋值给基类的对象
C.派生类的对象可以初始化基类的对象
D.基类的对象可以赋值给派生类的对象
3.下列函数中,可以作为虚函数的是( )。
A.静态成员函数
B.析构函数
C.构造函数
D.普通函数
4.“#include <iostream>”是()预处理命令。
A.条件编译
B.文件包含
C.工程配置
D.宏定义
5.下面对析构函数的正确描述是( )。
A.系统不能提供默认的析构函数
B.析构函数没有参数
C.析构函数必须由用户定义
D.析构函数可以设置默认参数
6.实现运行时的多态性要使用()。
A.重载函数
B.虚函数
C.析构函数
D.构造函数
7.下面程序段中,说法正确的是( ) class location{ public : int GetX(); }; class rectangle:private location { public: int GetW(); };
A.类rectangle的私有派生类是location
B.类rectangle中的public成员在类 location中是私有的
C.类location中的public成员在类 rectangle中是不可访问的
D.viod f( ) { Rectangle r; int X=r .GetX( ); } 其中int X = r .GetX( );是非法语句
8.缺省析构函数的函数体是( )。
A.随机产生的
B.空的
C.无法确定的
D.不存在
9.关于纯虚函数,下列表述正确的是( )。
A.纯虚函数的声明总是以“=0”结束
B.纯虚函数是未给出实现版本(即无函数体定义)的虚函数
C.派生类必须实现基类的纯虚函数
D.含有纯虚函数的类一定是派生类
10.下面描述中,错误的是()。
A.私有继承时,基类中的public成员在派生类中是private的
B.公有继承时,基类中的public成员在派生类中仍是public的
C.公有继承时,基类中的protected成员在派生类中仍是protected的
D.公有继承时,基类中的private成员在派生类中仍是private的
11.下面对构造函数的不正确描述是( )。
A.系统可以提供默认的构造函数
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数可以有参数,所以可以有返回值
12.假定已定义浮点型变量data,以二进制方式把data的值写入输出文件流对象outfile中去,正确的语句是( )。
A.outfile.write((float *) &data, sizeof(float));
B.outfile.write((float *) &data, data);
C.outfile.write((char *) &data, sizeof(float));
D.outfile.write((char *) &data, data);
13.有如下类声明: class Sample { int x; }; 则Sample类成员x是Sample类的()。
A.私有数据成员
B.公有数据成员
C.保护数据成员
D.以上选项都不正确
14.一个( )允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值可以取任意数据类型。
A.类模板
B.模板类
C.模板函数
D.函数模板
15.将一个string类对象赋予新值,应该使用string类的()函数。
A.swap
B.insert
C.find
D.assign
16.下列运算符中,()在C++中不能重载。
A.?:
B.<=
C.-
D.+
17.有关带默认参数的函数的描述正确的是()。
A.设置默认参数时,应该设置最右边的若干个参数的默认值
B.只能在函数定义时设置默认参数值
C.只能在函数声明时设置默认参数值
D.函数调用时,必须使用默认的参数值,不能给出新的实参值
18.在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。
A.operator+有两个参数,operator*有两个参数
B.operator+有两个参数,operator*有一个参数
C.operator+有一个参数,operator*有两个参数
D.operator+有一个参数,operator*有一个参数
19.下列关于C++类的描述中错误的是( )。
A.类用于描述事物的属性和对事物的操作
B.类与类之间必须是平等的关系,而不能组成层次关系
C.类与类之间可以通过封装而具有明确的独立性
D.类与类之间可以通过一些手段进行通信和联络
20.有关类和对象的说法不正确的是( )。
A.类与对象的关系和数据类型和变量的关系相似
B.对象是类的一个实例
C.任何一个对象只能属于一个具体的类
D.一个类只能有一个对象
21.执行语句“string str("abc");”时,系统会自动调用string类的构造函数()。
A.string(size_type n, char c)
B.string(const string &str)
C.string(const char *s)
D.string()
22.假设A为抽象类,下列语句( )是正确的。
A.int fun(A);
B.A *p;
C.A fun(int);
D.A Obj;
23.运算符重载的目的是()。
A.简化程序,减少目标代码
B.提高程序的效率
C.提高代码复用能力
D.使程序代码直观易读
24.下列关于构造函数的描述中,错误的是( )。
A.构造函数在说明类变量时自动执行
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数可以对静态数据成员进行初始化
25.若类中有指针成员变量,则应编写(),使得在对象销毁时能够自动调用该函数释放指针成员变量所指向的内存空间。
A.虚函数
B.析构函数
C.构造函数
D.友元函数
26.下面对静态数据成员的描述中,正确的是( )。
A.静态数据成员是类的所有对象共享的数据
B.静态数据成员不能通过类的对象访问
C.类的每个对象都有自己的静态数据成员
D.类的不同对象有不同的静态数据成员值
27.下面函数原型声明中,( )声明了fun为纯虚函数。
A.void fun()=0;
B.virtual void fun(){};
C.virtual void fun()=0;
D.virtual void fun();
28.假定X为一个类,执行X a[3],*p[2];语句时会自动调用该类的构造函数( )次。
A.5
B.4
C.3
D.2
29.下列( )是构造函数的特征。
A.构造函数必须指定函数类型
B.构造函数在创建对象时自动调用
C.构造函数不可以重载
D.构造函数不可以设置默认参数
30.假设堆内存分配均成功,则下面程序段完全正确的是()。
A.以上程序段均正确
B.int *p=new int[5];for(int i=0;i<5;i++,p++) {*p=i; cout<<*p;}delete []p;
C.int *p=new int[5]={1,2,3,4,5};for(int i=0;i<5;i++)cout<<p[i];delete []p;
D.int *p=new int(3);cout<<*p;delete p;
31.下列对派生类的描述中,()是错误的。
A.派生类至少有一个基类
B.派生类的成员除了它自己的成员外,包含了它的基类的成员
C.派生类中继承的基类成员的访问权限到派生类保持不变
D.一个派生类可以作另一个派生类的基类
32.下列关于构造函数说法不正确的是()。
A.构造函数必须有返回值
B.构造函数必须与类同名
C.构造函数可以省略不写
D.在构造函数中可以对类中的成员进行初始化
33.下列关于运算符重载的描述中,()是正确的。
A.运算符重载可以改变结合性
B.运算符重载可以改变操作数的个数
C.运算符重载可以改变优先级
D.运算符重载不可以改变语法结构