目录
判断题
1.函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。( T )
2.对象数组生命期结束时,对象数组的每个元素的析构函数并不会都被调用。( F )
3.静态成员变量的访问控制权限没有意义,静态成员变量均作为公有成员使用。(F)
4.如果A是B的友元类,那么B的成员函数可以访问A的私有成员。(F)
【解析】如果A是B的友元类,那么 A 的成员函数可以访问 B 的私有成员。
5.静态数据成员不属于某个对象,在给对象分配存储空间时,不包括静态数据成员所占的空间。(T)
6.在protected保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。(T)
【解析】派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问。
7.A has-a relationship is implemented via inheritance.(F)
8.类的组合关系可以用“Has-A”描述;类间的继承与派生关系可以用“Is-A”描述。(T)
9.In C++, only existing operators can be overloaded.(T)
10.对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数。(F)
11.对单目运算符重载为友元函数时,可以说明一个形参。而重载为成员函数时,不能显式说明形参。(T)
12.重定义虚函数的派生类必须是公有继承的。(T)
13.Dynamic binding is used as default binding method in C++.(F)
【翻译】动态绑定在C++中用作默认绑定方法。
【解析】动态绑定是在运行期间发生的绑定,发生动态绑定的函数的运行版本由传入的实际参数类型决定,在运行时觉得函数的版本,所以动态绑定又称运行时绑定,动态绑定是C++的多态实现的一种形式。
在C++中,当使用基类的引用或指针调用一个虚函数时将发生动态绑定。
14.预定义的插入符从键盘上接收数据是不带缓冲区的。(F)
15.记录流的当前格式化状态标志字中的每一位用于记录一种格式,这种格式是不能被设置或清除的。(F)
16.seekg()函数和seekp()函数分别用来定位读指针和写指针的。如果使用seek()函数可以同时定义读写指针。(F)
【解析】seekp 可用于将信息 put(放入 写入)到文件。 seekg 则可用于从文件中 get(获取)信息。
单选题
1.重载函数在调用时选择的依据中,错误的是( D )。
A.函数的参数
B.参数的类型
C.函数的名字
D.函数的类型
解析:函数类型就是函数返回值
2.以下程序存在的问题是:( C )
void fun()
{
int *num1, *num2;
num1 = new int[10];
num2 = new int[20];
num1[0] = 100;
num2[0] = 300;
num1 = num2;
delete [] num1;
}
A.num2不能给num1赋值
B.num2最初指向的空间没有释放
C.num1最初指向的空间没有释放
D.程序没有问题
3.如果默认参数的函数声明为“ void fun(int a,int b=1,char c='a',float d=3.2);”,
则下面调用写法正确的是( B )。
A.fun();
B.fun(2,3);
C.fun(2, ,'c',3.14)
D.fun(int a=1);
4.在面向对象的软件系统中,不同类对象之间的通信的一种构造称为___D____。
A.属性
B.封装
C.类
D.消息
5.下列关于this指针的叙述中,正确的是( D )
A.任何与类相关的函数都有this指针
B.类的成员函数都有this指针
C.类的友元函数都有this指针
D.类的非静态成员函数才有this指针
6.A function that is associated with an individual object is called __________.
A.a static function
B.a class function
C.an instance function ---- 实例函数
D.an object function
7. 下面关于友元的描述中,错误的是:( D )
A.友元函数可以访问该类的私有数据成员
B.一个类的友元类中的成员函数都是这个类的友元函数
C.友元可以提高程序的运行效率
D.类与类之间的友元关系可以继承
8.若有下面的语句:
string s="Hello";
s.append("123");
cout << s.at(5) << endl;
则执行后程序的输出结果是( B )
A.o
B.1
C.2
D.3
9.下列String类的( B )方法返回指定字符串的一部分。
A.extractstring()
B.substring()
C.Substring()
D.Middlestring()
10.建立派生类对象时, 3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数),这3种构造函数的调用顺序为(A)
A.abc
B.acb
C.cab
D.cba
【解析】对象创建时代码的加载顺序为:静态代码 --> 非静态代码 --> 构造方法。
若继承了父类,则加载顺序为:父类的静态的代码 --> 子类的静态的代码 --> 父类内部非静态代码 --> 父类的构造方法 --> 子类的非静态代码 --> 子类的构造方法。
11.为了能出现在赋值表达式的左右两边,重载的"[]"运算符应定义为:( B )
A.A operator [ ] (int);
B.A& operator [ ] (int);
C.const A operator [ ] (int);
D.以上答案都不对
虚函数(12-14)
12.关于纯虚函数和抽象类的描述中,( C )是错误的。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
【知识】
1.虚函数
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
2.纯虚数
定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加 =0:
例如:virtual void funtion1()=0
3.抽象类
含有纯虚函数的类被称为抽象类。抽象类只能作为派生类的基类,不能定义对象,但可以定义指针。在派生类实现该纯虚函数后,定义抽象类对象的指针,并指向或引用子类对象。
1)在定义纯虚函数时,不能定义虚函数的实现部分;
2)在没有重新定义这种纯虚函数之前,是不能调用这种函数的。
13.虚析构函数的作用是( C )
A.虚基类必须定义虚析构函数
B.类对象作用域结束时释放资源
C.delete动态对象时释放资源
D.无意义
【解析】总的来说虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的.
14.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值 ( A )
A.相同
B.不同
C.相容
D.部分相同
模板(15-16)
15.模板函数的真正代码是在哪个时期产生的__C__。
A.源程序中声明函数时
B.源程序中定义函数时
C.源程序中调用函数时
D.运行执行函数时
16.下列关于pair<>类模板的描述中,错误的是( C )
A.pair<>类模板定义头文件utility中
B.pair<>类模板作用是将两个数据组成一个数据,两个数据可以是同一个类型也可以是不同的类型
C.创建pair<>对象只能调用其构造函数
D.pair<>类模拟提供了两个成员函数first与second来访问这的两个数据
标准模板库STL(17)
17.设有如下代码段:
std::map<char *, int> m;
const int MAX_SIZE = 100;
int main() {
char str[MAX_SIZE];
for (int i = 0; i < 10; i++) {
std::cin >> str;
m[str] = i;
}
std::cout << m.size() << std::endl;
}
读入10个字符串,则输出的 m.size()
为( B )
A.0
B.1
C.10
IO流与文件操作(18-21)
18.分析以下程序:程序的输出结果是( B )
#include <iostream>
using namespace std;
void fun(int num)
{
cout << num << endl;
}
void fun(char ch)
{
cout << (ch + 1) << endl;
}
int main()
{
fun('A');
return 0;
}
A.65
B.66
C.A
D.B
19.关于read()函数的下列描述中,正确的是( D )。
A.该函数只能用来从键盘输入中获取字符串
B.该函数所获取的字符多少是不受限制的
C.该函数只能用于文本文件的操作中
D.该函数只能按规定读取所指定的字符数
20.在C++中,打开一个文件,就是将整个文件与一个(B )建立关联,关闭一个文件,就是取消这种关联。
A.类
B.流
C.对象
D.结构
21.下列打开文件的表达式中,错误的是:( D )
A.ofstream ofile; ofile.open(“C:\vc\abc.txt”,ios::binary);
B.fstream iofile;iofile.open(“abc.txt”,ios::ate);
C.ifstream ifile (“C:\vc\abc.txt”);
D.cout.open(“C:\vc\abc.txt”,ios::binary);
异常处理
22.What is wrong in the following code?( C )
vector<int> v;
v[0] = 2.5;
A.The program has a compile error because there are no elements in the vector.
B.The program has a compile error because you cannot assign a double value to v[0].
C.The program has a runtime error because there are no elements in the vector.
D.The program has a runtime error because you cannot assign a double value to v[0].
23.The function what() is defined in ______A________.
A.exception
B.runtime_error
C.overflow_error
D.bad_exception
24.下列关于异常的描述中,错误的是(A)。
A.编译错属于异常,可以抛出
B.运行错属于异常
C.硬件故障也可当异常抛出
D.只要是编程者认为是异常的都可当异常抛出
函数题
1.学生排名表(析构函数)
现在输入一批学生(人数大于0且不超过100)的名次和他们的姓名。要求按名次输出每个人的排名。
输入格式:每行为一个学生的信息,共两项,第一项为排名(为正整数,且任意两名学生的排名均不同),第二项为学生姓名。当输入-1时,表示输入结束。
输出格式:按名次输出学生姓名,每行一个。
函数接口定义:
main函数的一部分。