南开大学2015春学期《面向对象程序设计》在线作业 - 答案

发布时间:2015-08-09 15:12:54   来源:文档文库   
字号:

南开大学2015春学期《面向对象程序设计》在线作业

一、单选题(共 35 道试题,共 70 分。)

1. MyClass的定义如下: class MyClass { public: MyClass() { value = 0;} SetVariable(int i) { value = i; } private: int value; } 则对下列语句序列正确的描述是() MyClass *pmy p=&my

A. 语句p=&my;是把对象my赋值给指针变量p

B. 语句MyClass *pmy;会调用两次类MyClass的构造函数

C. 对语句 *p.SetVariable(5)的调用是正确的

D. 语句p->SetVariable(5)与语句my.SetVariable(5)等价

正确答案:D

2. 友元重载运算符obj1>obj2C++编译器解释为()

A. operator>(obj1,obj2)

B. >(obj1,obj2)

C. obj1.operator>(obj2)

D. obj2.operator>(obj1)

正确答案:A

3. 下面关于私有继承方式的论述中错误的是()

A. 基类中的私有成员对其对象不可见

B. 基类中的私有成员对其派生类不可见

C. 基类中的公有成员对其派生类可见

D. 基类中的保护成员对其派生类不可见

正确答案:D

4. 类的默认的无参构造函数()

A. 在任何情况下都存在

B. 仅当未定义无参构造函数时存在

C. 仅当未定义有参构造函数时存在

D. 仅当未定义任何构造函数时存在

正确答案:D

5. 若类中有指针成员变量,则应编写(),使得在对象销毁时能够自动调用该函数释放指针成员变量所指向的内存空间。

A. 友元函数

B. 虚函数

C. 构造函数

D. 析构函数

正确答案:D

6. 下列关于拷贝构造函数的描述中,错误的是()

A. 一个类可以定义多个拷贝构造函数

B. 若未定义拷贝构造函数,则系统会提供一个默认拷贝构造函数

C. 当类中有指针成员变量时,通常要为这个类定义一个拷贝构造函数来实现深拷贝

D. 拷贝构造函数中的参数按引用方式传递

正确答案:A

7. 下列关于虚函数的说明中,正确的是()

A. 从虚基类继承的函数都是虚函数

B. 虚函数不得是静态成员函数

C. 只能通过指针或引用调用虚函数

D. 抽象类中的成员函数都是虚函数

正确答案:B

8. 已知“int a=10,b=8;int &r=a; r=b;cout<”,则输出为()

A. 10,8,10

B. 10,8,8

C. 8,8,10

D. 8,8,8

正确答案:D

9. 在一个string类对象表示的字符串中插入新字符,应该使用string类的()函数。

A. assign

B. insert

C. swap

D. find

正确答案:B

10. 有如下类声明: class Sample { int x; }; Sample类成员xSample类的()

A. 公有数据成员

B. 保护数据成员

C. 私有数据成员

D. 以上选项都不正确

正确答案:C

11. 运算符重载的目的是()

A. 提高程序的效率

B. 提高代码复用能力

C. 简化程序,减少目标代码

D. 使程序代码直观易读

正确答案:D

12. 执行语句“string str("abc");”时,系统会自动调用string类的构造函数()

A. string()

B. string(const char *s)

C. string(const string &str)

D. string(size_type n, char c)

正确答案:B

13. 交换两个string类对象所表示的字符串的内容,应该使用string类的()函数。

A. assign

B. insert

C. swap

D. find

正确答案:C

14. 基类的()在私有继承时在派生类中为私有成员函数,在公有和保护继承时在派生类中为保护成员函数。

A. 私有成员函数

B. 保护成员函数

C. 公有成员

D. 保护数据成员

正确答案:B

15. 多继承的构造函数顺序可分为如下4步: ①所有非虚基类的构造函数按照它们被继承的顺序构造。 ②所有虚基类的构造函数按照它们被继承的顺序构造。 ③所有子对象的构造函数按照它们声明的顺序构造。 ④派生类自己的构造函数体这四个步骤的正确顺序是()

A. ④③①②

B. ②④③①

C. ②①③④

D. ③④①②

正确答案:C

16. 已知“float *p; p=new float[2];”,若分配成功,则指针p在堆中获得的字节数为()

A. 2

B. 4

C. 8

D. 不确定

正确答案:C

17. 在一个C++源文件中使用了cincout,那么在这个源文件中必须包含()文件。

A. iostream

B. fstream

C. stdio.h

D. stdlib.h

正确答案:A

18. 虚函数必须是类的()

A. 友元函数

B. 成员函数

C. 构造函数

D. 析构函数

正确答案:B

19. 在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。

A. assign

B. insert

C. swap

D. find

正确答案:D

20. 有关重载函数的描述正确的是()

A. 函数名相同的函数就是重载函数

B. 函数名相同但返回值类型不同的函数就是重载函数

C. 函数名相同但参数个数或类型不同的函数就是重载函数

D. 函数功能相同的函数就是重载函数

正确答案:C

21. 单目运算符作为类成员函数重载时()

A. 有形参

B. 没有形参

C. 有实参

D. 以上都不正确

正确答案:B

22. 下列关于运算符重载正确的是()

A. 运算符重载可以改变运算符的操作数个数

B. 运算符重载可以改变运算符的优先级

C. 运算符重载可以改变运算符的结合性

D. 运算符重载不可以改变语法结构

正确答案:D

23. 使用string类,必须在程序中包含头文件()

A. string.h

B. string

C. cstring.h

D. cstring

正确答案:B

24. 变量的引用,其含义是指该变量的()

A.

B. 类型

C. 别名

D. 地址

正确答案:C

25. 下面对静态数据成员的描述中,正确的是()

A. 静态数据成员可以在类体内进行初始化

B. 静态数据成员不可以被该类的对象调用

C. 静态数据成员不能受private控制符的作用

D. 静态数据成员可以直接用类名访问

正确答案:D

26. 一个类的友元函数或友元类能够通过成员操作符访问该类的()

A. 私有成员

B. 保护成员

C. 公有成员

D. 所有成员

正确答案:D

27. 下列虚基类的声明中,正确的是()

A. class virtual B:public A

B. virtual class B:public A

C. class B: public A virtual

D. class B: virtual public A

正确答案:D

28. 下列关于赋值运算符重载的说法中正确的是()

A. 返回值一般是以引用方式返回的对象,而函数体中总是用语句“return *this;”返回this指针所指向的对象

B. 赋值运算符只能以非成员函数的方式重载

C. 赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载

D. 以上均不正确

正确答案:A

29. 在公有派生情况下,有关派生类对象基类对象的关系,下列叙述不正确的是()

A. 派生类的对象可以直接访问基类的所有成员

B. 派生类的对象可以初始化基类的引用

C. 派生类的对象不可以直接访问基类中的私有成员

D. 派生类的对象的地址可以赋给指向基类的指针

正确答案:A

30. 已知“float *p; p=new float[2];”,若要释放p所指向的堆中的这些字节,下列语句正确的是()

A. delete p;

B. delete p[];

C. delete []p;

D. delete p[2];

正确答案:C

31. 程序在调用重载函数时,根据()区分到底要调用哪个函数。

A. 函数名

B. 返回值类型

C. 参数个数和类型

D. 以上都可以

正确答案:C

32. 假定MyClass为一类,执行MyClass a,b(2),*p[2];语句时会自动调用该类构造函数()次。

A. 2

B. 3

C. 4

D. 5

正确答案:A

33. 下面关于类的成员函数描述不正确的是()

A. 静态成员函数内可以直接访问类的非静态成员数据

B. 静态成员函数内可以直接访问类的静态成员数据

C. 非静态成员函数可以直接访问类的非静态成员数据

D. 非静态成员函数可以直接访问类的静态成员数据

正确答案:A

34. 在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()

A. operator+有两个参数,operator*有两个参数

B. operator+有两个参数,operator*有一个参数

C. operator+有一个参数,operator*有两个参数

D. operator+有一个参数,operator*有一个参数

正确答案:C

35. C++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。

A. 继承

B. 封装

C. 多态

D. 重载

正确答案:A

15春学期《面向对象程序设计》在线作业

二、判断题(共 15 道试题,共 30 分。)

1. C++程序中,有且仅能有一个主函数,且其函数名必须是main

A. 错误

B. 正确

正确答案:B

2. 在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。

A. 错误

B. 正确

正确答案:B

3. C++中,允许从一个类派生出任意多个类,但不允许某个类同时从多个类派生。

A. 错误

B. 正确

正确答案:A

4. 抽象类不能定义对象,但可以声明抽象类的指针或引用。

A. 错误

B. 正确

正确答案:B

5. 派生类至少有一个基类。

A. 错误

B. 正确

正确答案:B

6. 基类类型的指针可以指向其派生类对象。

A. 错误

B. 正确

正确答案:B

7. 构造函数不能被派生类继承。

A. 错误

B. 正确

正确答案:B

8. 抽象类虽然也是一种数据类型,但它不能建立对象,只能作为基类被其他类继承。

A. 错误

B. 正确

正确答案:B

9. 类中所提供的成员函数可以直接访问该类的私有成员。

A. 错误

B. 正确

正确答案:B

10. aMyClass类对象,“static void SetRate(double r){...}”是MyClass类的静态成员函数,则执行语句“a.SetRate(0.05);”时,SetRate成员函数中的this指针指向对象a的地址。

A. 错误

B. 正确

正确答案:A

11. 在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。

A. 错误

B. 正确

正确答案:A

12. 一个类的静态数据成员被该类的所有对象共享。

A. 错误

B. 正确

正确答案:B

13. 私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。

A. 错误

B. 正确

正确答案:A

14. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: AB operator+(AB &,AB &);

A. 错误

B. 正确

正确答案:A

15. 以友元方式重载运算符时,形参列表中至少有一个参数必须是自定义数据类型。

A. 错误

B. 正确

正确答案:B

本文来源:https://www.2haoxitong.net/k/doc/a493e192de80d4d8d05a4f56.html

《南开大学2015春学期《面向对象程序设计》在线作业 - 答案.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式