南开13秋学期《面向对象程序设计》在线作业

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

一、单选题
1. 下列关于赋值运算符重载的说法中正确的是()。
A. 返回值一般是以引用方式返回的对象,而函数体中总是用语句“return *this;”返回this指针所指向的对象
B. 赋值运算符只能以非成员函数的方式重载
C. 赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载
D. 以上均不正确
正确答案:A

2. 下列关于成员函数特征的描述中,错误的是()。
A. 成员函数可以重载
B. 成员函数一定是内联函数
C. 成员函数可以设置参数的默认值
D. 成员函数可以是静态的
正确答案:B

3. 派生类中的成员不能访问基类中的()。
A. 私有成员
B. 公有成员
C. 保护成员
D. 以上都可以
正确答案:A

4. 关于纯虚函数和抽象类的描述中,错误的是()。
A. 纯虚函数是一种特殊的虚函数,它没有具体的实现。
B. 抽象类是指具有纯虚函数的类。
C. 一个基类中有纯虚函数,该类的派生类一定不再是抽象类。
D. 抽象类作为基类来使用,其纯虚函数的实现由派生类给出。
正确答案:C

5. 下列关于虚函数的说明中,正确的是()。
A. 从虚基类继承的函数都是虚函数
B. 虚函数不得是静态成员函数
C. 只能通过指针或引用调用虚函数
D. 抽象类中的成员函数都是虚函数
正确答案:B

6. 假设堆内存分配均成功,则下面程序段完全正确的是()。
A. int *p=new int(3);cout<<*p;delete p;
B. int *p=new int[5]={1,2,3,4,5};for(int i=0;i<5;i++)cout<<p[i];delete []p;
C. int *p=new int[5];for(int i=0;i<5;i++,p++) {*p=i; cout<<*p;}delete []p;
D. 以上程序段均正确
正确答案:A

7. 运算符重载的目的是()。
A. 提高程序的效率
B. 提高代码复用能力
C. 简化程序,减少目标代码
D. 使程序代码直观易读
正确答案:D

8. 在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。
A. assign
B. insert
C. swap
D. find
正确答案:D

9. 在一个类中,可以对一个操作符进行()重载。
A. 1种
B. 2种
C. 3种
D. 多种
正确答案:D

10. 对A、B两个类进行多重继承得到派生类C,则创建派生类C的对象时,从基类B中继承过来的成员变量由()类的构造函数进行初始化。
A. A
B. B
C. C
D. 都可以
正确答案:B

11. 已知“int a=10,*p;int *&r=p; r=&a;*p=20;cout<<a;”,则输出为()。
A. 10
B. 20
C. 不确定值
D. 程序有错误
正确答案:B

12. 变量的引用,其含义是指该变量的()。
A. 值
B. 类型
C. 别名
D. 地址
正确答案:C

13. 已知“int a=10,b=8;int &r=a; r=b;cout<<a<<","<<b<<","<<r;”,则输出为()。
A. 10,8,10
B. 10,8,8
C. 8,8,10
D. 8,8,8
正确答

案:D

14. 下列关于运算符重载的描述中,正确的是()。
A. 运算符重载可以改变操作数的个数
B. 运算符重载可以改变运算符的优先级
C. 运算符重载可以改变运算符的结合性
D. 运算符重载可以使运算符实现特殊功能
正确答案:D

15. 类MyClass的定义如下:
class MyClass
{
public:
MyClass() { value = 0;}
SetVariable(int i) { value = i; }
private:
int value;
}
则对下列语句序列正确的描述是()。
MyClass *p,my; p=&my;
A. 语句p=&my;是把对象my赋值给指针变量p
B. 语句MyClass *p,my;会调用两次类MyClass的构造函数
C. 对语句 *p.SetVariable(5)的调用是正确的
D. 语句p->SetVariable(5)与语句my.SetVariable(5)等价
正确答案:D

16. 运行以下程序时,如果由键盘输入65 14,则输出结果是()。
#include <iostream>
using namespace std;
int main()
{ int m, n;
cout<<"Input m, n:";
cin>>m>>n;
while(m!=n)
{
while(m>n) m-=n;
while(n>m) n-=m;
}
cout<<m<<endl;
return 0;
}
A. 3
B. 2
C. 1
D. 0
正确答案:C

17. 在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。
A. operator+有两个参数,operator*有两个参数
B. operator+有两个参数,operator*有一个参数
C. operator+有一个参数,operator*有两个参数
D. operator+有一个参数,operator*有一个参数
正确答案:C

18. 若类中有指针成员变量,则应编写(),使得在对象销毁时能够自动调用该函数释放指针成员变量所指向的内存空间。
A. 友元函数
B. 虚函数
C. 构造函数
D. 析构函数
正确答案:D

19. 有如下类声明:
class Sample { int x; };
则Sample类成员x是Sample类的()。
A. 公有数据成员
B. 保护数据成员
C. 私有数据成员
D. 以上选项都不正确
正确答案:C

20. 下列关于拷贝构造函数的描述中,错误的是()。
A. 一个类可以定义多个拷贝构造函数
B. 若未定义拷贝构造函数,则系统会提供一个默认拷贝构造函数
C. 当类中有指针成员变量时,通常要为这个类定义一个拷贝构造函数来实现深拷贝
D. 拷贝构造函数中的参数按引用方式传递
正确答案:A

21. 下列关于构造函数说法不正确的是()。
A. 构造函数必须与类同名
B. 构造函数可以省略不写
C. 构造函数必须有返回值
D. 在构造函数中可以对类中的成员进行初始化
正确答案:C

22. 要在类对象上使用运算符,以下不用必须被重载的运算符是()。
A. [ ]
B. =
C. ++
D. --
正确答案:B

23. 在一个string类对象表示的字符串中插入新字符,应该使用string类的()函数。
A. assign
B. insert
C. swap
D. find
正确

答案:B

24. 抽象类不能定义对象,但可以声明抽象类的()。
A. 指针或引用
B. 函数返回类型
C. 显式转换
D. 以上都是
正确答案:D

25. 下面关于构造函数和析构函数的描述,错误的是()。
A. 析构函数中调用虚函数采用静态联编
B. 对虚析构函数的调用可以采用动态联编
C. 当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数
D. 构造函数可以声明为虚函数
正确答案:D

26. 类的默认的无参构造函数()。
A. 在任何情况下都存在
B. 仅当未定义无参构造函数时存在
C. 仅当未定义有参构造函数时存在
D. 仅当未定义任何构造函数时存在
正确答案:D

27. 下面描述中,错误的是()。
A. 公有继承时,基类中的public成员在派生类中仍是public的
B. 公有继承时,基类中的private成员在派生类中仍是private的
C. 公有继承时,基类中的protected成员在派生类中仍是protected的
D. 私有继承时,基类中的public成员在派生类中是private的
正确答案:B

28. 将一个函数声明为某类的友元函数后,则在函数中不可以直接访问该类的()。
A. 公有成员
B. 私有成员
C. 保护成员
D. 都可访问
正确答案:D

29. 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()。
A. 派生类的对象可以直接访问基类的所有成员
B. 派生类的对象可以初始化基类的引用
C. 派生类的对象不可以直接访问基类中的私有成员
D. 派生类的对象的地址可以赋给指向基类的指针
正确答案:A

30. 以成员函数方式重载运算符“>”,则obj1>obj2被C++编译器解释为()。
A. operator>(obj1,obj2)
B. >(obj1,obj2)
C. obj1.operator>(obj2)
D. obj2.operator>(obj1)
正确答案:C

31. 有关重载函数的描述正确的是()。
A. 函数名相同的函数就是重载函数
B. 函数名相同但返回值类型不同的函数就是重载函数
C. 函数名相同但参数个数或类型不同的函数就是重载函数
D. 函数功能相同的函数就是重载函数
正确答案:C

32. 下列关于类和对象的叙述中,错误的是()。
A. 一个类只能有一个对象
B. 对象是类的具体实例
C. 类是某一类对象的抽象
D. 类和对象的关系是一种数据类型与变量的关系
正确答案:A

33. 对于拷贝构造函数,正确的描述是()。
A. 在C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
B. 必须为每个类定义拷贝构造函数
C. 如果要使用拷贝构造函数,则必须在类中先定义
D. 当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
正确答案:A

34. 假定MyClass为一类,执行MyClass a,b(2),*p[2];语句时会自动调用该

类构造函数()次。
A. 2
B. 3
C. 4
D. 5
正确答案:A

35. 下列运算符中,()在C++中不能重载。
A. ?:
B. +
C. -
D. <=
正确答案:A


二、判断题
1. a为MyClass类对象,“static void SetRate(double r){...}”是MyClass类的静态成员函数,则执行语句“a.SetRate(0.05);”时,SetRate成员函数中的this指针指向对象a的地址。
A. 错误
B. 正确
正确答案:A

2. 私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。
A. 错误
B. 正确
正确答案:A

3. 要使语句“MyClass a;”能够编译通过,必须在定义MyClass类时编写无参构造函数。
A. 错误
B. 正确
正确答案:A

4. 类中所提供的成员函数可以直接访问该类的私有成员。
A. 错误
B. 正确
正确答案:B

5. 在C++程序中,有且仅能有一个主函数,且其函数名必须是main。
A. 错误
B. 正确
正确答案:B

6. 定义一个虚基类后,则该虚基类后继类层次中的类都需要调用虚基类的构造函数对虚基类中定义的成员变量进行初始化。
A. 错误
B. 正确
正确答案:B

7. 抽象类不能定义对象,但可以声明抽象类的指针或引用。
A. 错误
B. 正确
正确答案:B

8. 基类类型的指针可以指向其派生类对象。
A. 错误
B. 正确
正确答案:B

9. 在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。
A. 错误
B. 正确
正确答案:A

10. 以友元方式重载运算符时,形参列表中至少有一个参数必须是自定义数据类型。
A. 错误
B. 正确
正确答案:B

11. 在派生类对象销毁时,系统除了会自动调用派生类的析构函数,还会自动调用基类的析构函数。
A. 错误
B. 正确
正确答案:B

12. 在C++中,可以声明虚构造函数和虚析构函数。
A. 错误
B. 正确
正确答案:A

13. 派生类至少有一个基类。
A. 错误
B. 正确
正确答案:B

14. 对虚函数的调用,系统都是采用动态联编。
A. 错误
B. 正确
正确答案:A

15. 抽象类虽然也是一种数据类型,但它不能建立对象,只能作为基类被其他类继承。
A. 错误
B. 正确
正确答案:B


相关文档
最新文档