A.10,8,10
B.10,8,8
C.8,8,10
D.8,8,8
正确答案:
9. 在一个string类对象表示的字符串中插入新字符,应该使用string类的()函数。
A.assign
B.insert
C.swap
D.find
正确答案:
10. 有如下类声明:
classSample{intx;};则Sample类成员x是Sample类的()。
A.公有数据成员
B.保护数据成员
C.私有数据成员
D.以上选项都不正确
正确答案:
11. 运算符重载的目的是()。
A.提高程序的效率
B.提高代码复用能力
C.简化程序,减少目标代码
D.使程序代码直观易读
正确答案:
12. 执行语句“stringstr("abc");”时,系统会自动调用string类的构造函数()。
A.string()
B.string(constchar*s)
C.string(conststring&str)
D.string(size_typen,charc)
正确答案:
13. 交换两个string类对象所表示的字符串的内容,应该使用string类的()函数。
A.assign
B.insert
C.swap
D.find
正确答案:
14. 基类的()在私有继承时在派生类中为私有成员函数,在公有和保护继承时在派生类中为保护成员函数。
A.私有成员函数
B.保护成员函数
C.公有成员
D.保护数据成员
正确答案:
15. 多继承的构造函数顺序可分为如下4步:
①所有非虚基类的构造函数按照它们被继承的顺序构造。
②所有虚基类的构造函数按照它们被继承的顺序构造。
③所有子对象的构造函数按照它们声明的顺序构造。
④派生类自己的构造函数体这四个步骤的正确顺序是()。
A.④③①②
B.②④③①
C.②①③④
D.③④①②
正确答案:
16. 已知“float*p;p=newfloat[2];”,若分配成功,则指针p在堆中获得的字节数为()。
A.2
B.4
C.8
D.不确定
正确答案:
17. 在一个C++源文件中使用了cin和cout,那么在这个源文件中必须包含()文件。
A.iostream
B.fstream
C.stdio.h
D.stdlib.h
正确答案:
18. 虚函数必须是类的()。
A.友元函数
B.成员函数
C.构造函数
D.析构函数
正确答案:
19. 在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。
A.assign
B.insert
C.swap
D.find
正确答案:
20. 有关重载函数的描述正确的是()。
A.函数名相同的函数就是重载函数
B.函数名相同但返回值类型不同的函数就是重载函数
C.函数名相同但参数个数或类型不同的函数就是重载函数
D.函数功能相同的函数就是重载函数
正确答案:
21. 单目运算符作为类成员函数重载时()。
A.有形参
B.没有形参
C.有实参
D.以上都不正确
正确答案:
22. 下列关于运算符重载正确的是()。
A.运算符重载可以改变运算符的操作数个数
B.运算符重载可以改变运算符的优先级
C.运算符重载可以改变运算符的结合性
D.运算符重载不可以改变语法结构
正确答案:
23. 使用string类,必须在程序中包含头文件()。
A.string.h
B.string
C.cstring.h
D.cstring
正确答案:
24. 变量的引用,其含义是指该变量的()。
A.值
B.类型
C.别名
D.地址
正确答案:
25. 下面对静态数据成员的描述中,正确的是()。
A.静态数据成员可以在类体内进行初始化
B.静态数据成员不可以被该类的对象调用
C.静态数据成员不能受private控制符的作用
D.静态数据成员可以直接用类名访问
正确答案:
26. 一个类的友元函数或友元类能够通过成员操作符访问该类的()。
A.私有成员
B.保护成员
C.公有成员
D.所有成员
正确答案:
27. 下列虚基类的声明中,正确的是()。
A.classvirtualB:
publicA
B.virtualclassB:
publicA
C.classB:
publicAvirtual
D.classB:
virtualpublicA
正确答案:
28. 下列关于赋值运算符重载的说法中正确的是()。
A.返回值一般是以引用方式返回的对象,而函数体中总是用语句“return*this;”返回this指针所指向的对象
B.赋值运算符只能以非成员函数的方式重载
C.赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载
D.以上均不正确
正确答案:
29. 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()。
A.派生类的对象可以直接访问基类的所有成员
B.派生类的对象可以初始化基类的引用
C.派生类的对象不可以直接访问基类中的私有成员
D.派生类的对象的地址可以赋给指向基类的指针
正确答案:
30. 已知“float*p;p=newfloat[2];”,若要释放p所指向的堆中的这些字节,下列语句正确的是()。
A.deletep;
B.deletep[];
C.delete[]p;
D.deletep[2];
正确答案:
31. 程序在调用重载函数时,根据()区分到底要调用哪个函数。
A.函数名
B.返回值类型
C.参数个数和类型
D.以上都可以
正确答案:
32. 假定MyClass为一类,执行MyClassa,b
(2),*p[2];语句时会自动调用该类构造函数()次。
A.2
B.3
C.4
D.5
正确答案:
33. 下面关于类的成员函数描述不正确的是()。
A.静态成员函数内可以直接访问类的非静态成员数据
B.静态成员函数内可以直接访问类的静态成员数据
C.非静态成员函数可以直接访问类的非静态成员数据
D.非静态成员函数可以直接访问类的静态成员数据
正确答案:
34. 在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
下列叙述中正确的是()。
A.operator+有两个参数,operator*有两个参数
B.operator+有两个参数,operator*有一个参数
C.operator+有一个参数,operator*有两个参数
D.operator+有一个参数,operator*有一个参数
正确答案:
35. 在C++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。
A.继承
B.封装
C.多态
D.重载
正确答案:
15春学期《面向对象程序设计》在线作业
二、判断题(共15道试题,共30分。
)
1. 在C++程序中,有且仅能有一个主函数,且其函数名必须是main。
A.错误
B.正确
正确答案:
2. 在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。
A.错误
B.正确
正确答案:
3. 在C++中,允许从一个类派生出任意多个类,但不允许某个类同时从多个类派生。
A.错误
B.正确
正确答案:
4. 抽象类不能定义对象,但可以声明抽象类的指针或引用。
A.错误
B.正确
正确答案:
5. 派生类至少有一个基类。
A.错误
B.正确
正确答案:
6. 基类类型的指针可以指向其派生类对象。
A.错误
B.正确
正确答案:
7. 构造函数不能被派生类继承。
A.错误
B.正确
正确答案:
8. 抽象类虽然也是一种数据类型,但它不能建立对象,只能作为基类被其他类继承。
A.错误
B.正确
正确答案:
9. 类中所提供的成员函数可以直接访问该类的私有成员。
A.错误
B.正确
正确答案:
10. a为MyClass类对象,“staticvoidSetRate(doubler){...}”是MyClass类的静态成员函数,则执行语句“a.SetRate(0.05);”时,SetRate成员函数中的this指针指向对象a的地址。
A.错误
B.正确
正确答案:
11. 在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。
A.错误
B.正确
正确答案:
12. 一个类的静态数据成员被该类的所有对象共享。
A.错误
B.正确
正确答案:
13. 私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。
A.错误
B.正确
正确答案:
14. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:
ABoperator+(AB&,AB&);
A.错误
B.正确
正确答案:
15. 以友元方式重载运算符时,形参列表中至少有一个参数必须是自定义数据类型。
A.错误
B.正确
正确答案: