网院作业 发表于 2017-9-19 21:55:50

南开17秋学期《面向对象程序设计》在线作业(答案)

17秋学期《面向对象程序设计》在线作业
一、单选题:【35道,总分:70分】南开大学


1.在一个C++源文件中使用了cin和cout,那么在这个源文件中必须包含(    )文件。          (满分:2)
    A. iostream
    B. fstream
    C. stdio.h
    D. stdlib.h
2.在保护继承中,基类中的私有成员作为派生类的(    )。          (满分:2)
    A. 公有成员
    B. 私有成员
    C. 保护成员
    D. 不可访问
3.有如下类声明: class Sample { int x; }; 则Sample类成员x是Sample类的(    )。          (满分:2)
    A. 公有数据成员
    B. 保护数据成员
    C. 私有数据成员
    D. 以上选项都不正确
4.抽象类不能定义对象,但可以声明抽象类的(    )。          (满分:2)
    A. 指针或引用
    B. 函数返回类型
    C. 显式转换
    D. 以上都是
5.单目运算符作为类成员函数重载时(    )。          (满分:2)
    A. 有形参
    B. 没有形参
    C. 有实参
    D. 以上都不正确
6.在C++中,通过(    )的机制可以对原有的类进行扩充和完善以适应新的需要。          (满分:2)
    A. 继承
    B. 封装
    C. 多态
    D. 重载
7.如果一个类至少有一个纯虚函数,那么就称该类是(    )。          (满分:2)
    A. 抽象类
    B. 虚基类
    C. 派生类
    D. 以上都不对
8.有关带默认参数的函数的描述正确的是(    )。          (满分:2)
    A. 只能在函数定义时设置默认参数值
    B. 只能在函数声明时设置默认参数值
    C. 函数调用时,必须使用默认的参数值,不能给出新的实参值
    D. 设置默认参数时,应该设置最右边的若干个参数的默认值
9.下列关于虚函数的说明中,正确的是(    )。          (满分:2)
    A. 从虚基类继承的函数都是虚函数
    B. 虚函数不得是静态成员函数
    C. 只能通过指针或引用调用虚函数
    D. 抽象类中的成员函数都是虚函数
10.下列关于赋值运算符重载的说法中正确的是(    )。          (满分:2)
    A. 返回值一般是以引用方式返回的对象,而函数体中总是用语句“return *this;”返回this指针所指向的对象
    B. 赋值运算符只能以非成员函数的方式重载
    C. 赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载
    D. 以上均不正确
11.已知“int a=10;int &r=a; r=r+20;cout<<a;”,则输出为(    )。          (满分:2)
    A. 10
    B. 20
    C. 30
    D. 不确定值
12.友元重载运算符obj1>obj2被C++编译器解释为(    )。          (满分:2)
    A. operator>(obj1,obj2)
    B. >(obj1,obj2)
    C. obj1.operator>(obj2)
    D. obj2.operator>(obj1)
13.结构化程序设计方法以(    )为中心进行分析和设计。          (满分:2)
    A. 结构
    B. 模块
    C. 对象
    D. 类
14.已知“float *p; p=new float;”,若分配成功,则指针p在堆中获得的字节数为(    )。          (满分:2)
    A. 2
    B. 4
    C. 8
    D. 不确定
15.类对象占用内存的大小与(    )有关。          (满分:2)
    A. 数据成员
    B. 成员函数
    C. 数据成员和成员函数
    D. 私有成员
16.抽象类的作用主要是(    )。          (满分:2)
    A. 直接用作基类
    B. 直接用作指针
    C. 引用的基类型
    D. 包括以上各项
17.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是(    )。          (满分:2)
    A. 派生类的对象可以直接访问基类的所有成员
    B. 派生类的对象可以初始化基类的引用
    C. 派生类的对象不可以直接访问基类中的私有成员
    D. 派生类的对象的地址可以赋给指向基类的指针
18.在派生类中重新定义虚函数时,除了(    ),其他方面都应与基类中相应的虚函数保持一致。          (满分:2)
    A. 函数名
    B. 参数
    C. 函数体
    D. 返回值类型
19.基类的(    )在私有继承时在派生类中为私有成员函数,在公有和保护继承时在派生类中为保护成员函数。          (满分:2)
    A. 私有成员函数
    B. 保护成员函数
    C. 公有成员
    D. 保护数据成员
20.关于纯虚函数和抽象类的描述中,错误的是(    )。          (满分:2)
    A. 纯虚函数是一种特殊的虚函数,它没有具体的实现。
    B. 抽象类是指具有纯虚函数的类。
    C. 一个基类中有纯虚函数,该类的派生类一定不再是抽象类。
    D. 抽象类作为基类来使用,其纯虚函数的实现由派生类给出。
21.下列关于运算符重载正确的是(    )。          (满分:2)
    A. 运算符重载可以改变运算符的操作数个数
    B. 运算符重载可以改变运算符的优先级
    C. 运算符重载可以改变运算符的结合性
    D. 运算符重载不可以改变语法结构
22.将一个函数声明为某类的友元函数后,则在函数中不可以直接访问该类的(    )。          (满分:2)
    A. 公有成员
    B. 私有成员
    C. 保护成员
    D. 都可访问
23.假定MyClass为一类,执行MyClass a,b(2),*p;语句时会自动调用该类构造函数(    )次。          (满分:2)
    A. 2
    B. 3
    C. 4
    D. 5
24.对A、B两个类进行多重继承得到派生类C,则创建派生类C的对象时,从基类B中继承过来的成员变量由(    )类的构造函数进行初始化。          (满分:2)
    A. A
    B. B
    C. C
    D. 都可以
25.“#include ”是(    )预处理命令。          (满分:2)
    A. 宏定义
    B. 文件包含
    C. 条件编译
    D. 工程配置
26.虚函数必须是类的(    )。          (满分:2)
    A. 友元函数
    B. 成员函数
    C. 构造函数
    D. 析构函数
27.在使用类创建对象时,系统会自动调用该对象的(    )完成对象中数据成员的初始化等操作。          (满分:2)
    A. 友元函数
    B. 虚函数
    C. 构造函数
    D. 析构函数
28.静态数据成员初始化在(    )进行,而且前面不加static,以免与一般静态变量或对象相混淆。          (满分:2)
    A. 类体内
    B. 类体外
    C. 构造函数内
    D. 内联函数内
29.使用string类,必须在程序中包含头文件(    )。          (满分:2)
    A. string.h
    B. string
    C. cstring.h
    D. cstring
30.类MyClass的定义如下:class MyClass{public:      MyClass(    ) { value = 0;}      SetVariable(int i) { value = i; }private:      int value;}则对下列语句序列正确的描述是(    )。 MyClass *p,my;p=&my;          (满分:2)
    A. 语句p=&my;是把对象my赋值给指针变量p
    B. 语句MyClass *p,my;会调用两次类MyClass的构造函数
    C. 对语句 *p.SetVariable(5)的调用是正确的
    D. 语句p->SetVariable(5)与语句my.SetVariable(5)等价
31.多继承的构造函数顺序可分为如下4步:①所有非虚基类的构造函数按照它们被继承的顺序构造。②所有虚基类的构造函数按照它们被继承的顺序构造。③所有子对象的构造函数按照它们声明的顺序构造。④派生类自己的构造函数体这四个步骤的正确顺序是(    )。          (满分:2)
    A. ④③①②
    B. ②④③①
    C. ②①③④
    D. ③④①②
32.类aClass的定义如下:class aClass{public:       aClass(    ){}       aClass(int i){value=new int(i);}       int *value;}若要对类中的value赋值,则下面的语句中,正确的是(    )。          (满分:2)
    A. aClass my; my.value=10;
    B. aClass my; *my.value=10;
    C. aClass my; my.*value=10;
    D. aClass my(10);
33.在一个类中,可以对一个操作符进行(    )重载。          (满分:2)
    A. 1种
    B. 2种
    C. 3种
    D. 多种
34.下列关于构造函数调用顺序的描述中,正确的是(    )。          (满分:2)
    A. 创建派生类对象时,先调用基类的构造函数,后调用派生类的构造函数
    B. 创建基类对象时,先调用基类的构造函数,后调用派生类的构造函数
    C. 创建派生类对象时,先调用派生类的构造函数,后调用基类的构造函数
    D. 创建基类对象时,先调用派生类的构造函数,后调用基类的构造函数
35.下列关于类和对象的叙述中,错误的是(    )。          (满分:2)
    A. 一个类只能有一个对象
    B. 对象是类的具体实例
    C. 类是某一类对象的抽象
    D. 类和对象的关系是一种数据类型与变量的关系
二、判断题:【15道,总分:30分】

1.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:AB operator+(AB &,AB &);          (满分:2)
    A. 错误
    B. 正确
2.在C++中,允许从一个类派生出任意多个类,但不允许某个类同时从多个类派生。          (满分:2)
    A. 错误
    B. 正确
3.基类类型的指针可以指向其派生类对象。          (满分:2)
    A. 错误
    B. 正确
4.在C++程序中,有且仅能有一个主函数,且其函数名必须是main。          (满分:2)
    A. 错误
    B. 正确
5.在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。          (满分:2)
    A. 错误
    B. 正确
6.要使语句“MyClass a;”能够编译通过,必须在定义MyClass类时编写无参构造函数。          (满分:2)
    A. 错误
    B. 正确
7.构造函数不能被派生类继承。          (满分:2)
    A. 错误
    B. 正确
8.一个类的静态数据成员被该类的所有对象共享。          (满分:2)
    A. 错误
    B. 正确
9.C++语言类定义中默认的访问权限是public。          (满分:2)
    A. 错误
    B. 正确
10.在派生类对象销毁时,系统除了会自动调用派生类的析构函数,还会自动调用基类的析构函数。          (满分:2)
    A. 错误
    B. 正确
11.抽象类不能定义对象,但可以声明抽象类的指针或引用。          (满分:2)
    A. 错误
    B. 正确
12.在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。          (满分:2)
    A. 错误
    B. 正确
13.以友元方式重载运算符时,形参列表中至少有一个参数必须是自定义数据类型。          (满分:2)
    A. 错误
    B. 正确
14.对虚函数的调用,系统都是采用动态联编。          (满分:2)
    A. 错误
    B. 正确
15.私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。          (满分:2)
    A. 错误
    B. 正确
更多学习资料请登录www.openhelp100.com

页: [1]
查看完整版本: 南开17秋学期《面向对象程序设计》在线作业(答案)