1.面试官:什么是文件流?
应聘者:写入文件或者从文件读出的数据流称之为文件流。
2.面试官:文件流的类时如何划分的?
应聘者:当C++对文件进行处理时,需要包括头文件iostream和fstream。fstream头文件包括流类ifstream(从头文件输入)、ofstream(向文件输出)和fstream(从文件输入/输出)的定义。生成这些流类的对象可以打开文件,这些流类分别从istream、ostream和iostream类派生。I/O类的继承关系如图下所示。
3.面试官:二进制与文本的区别?
应聘者:用文本码形式输出的数据是与字符一一对应的,一个字节代表一个字符,可以直接在屏幕上显示或打印出来。这种方式使用方便,比较直观,便于阅读,便于对字符逐个进行输入输出。但一般占存储空间较多,而且要花费转换时间。用二进制形式输出数值,可以节省外存空间,而且不需要转换时间,但一个字节并不对应一个字符,不能直接显示文件中的内容。如果在程序运行过程中有些中间结果数据暂时保存在磁盘文件中,以后又需要输入到内存的,这时用二进制文件保存是最合适的。如果是为了能显示和打印以供阅读,则应按文本形式输出。此时得到的是A文本文件,它的内容可以直接在显示屏上观看。
4.面试官:vector和数组有什么区别?
应聘者:vector是C++标准库中定义的类型,是容器的一种。vector类型和数组类型的基本功能都是一样的,就是存储同类元素。数组使用前要实例化,实例化了,长度就固定了,而vector实例化不会固定长度,想添加还可以添加内容。而且系统在处理不定长的时候向量比数组要好,速度要快。
5.面试官:如何选取合适的容器?
应聘者:如果用户需要高效的随机存取,而不在乎插入和删除的效率,使用vector;如果用户需要大量的插入和删除,而不关心随机存取,则应使用list;如果用户需要随机存取,而且关心两端数据的插入和删除,则应使用deque。
6.面试官:类模板什么时候会被实例化呢?
应聘者:在以下情况会被实例化:
(1)当使用了类模板实例的名字,并且上下文环境要求存在类的定义时。
(2)对象类型是一个类模板实例,当对象被定义时。此点被称作类的实例化点。
(3)一个指针或引用指向一个类模板实例,当检查这个指针或引用所指的对象时。
7.面试官:类模板特化需要注意什么?
应聘者:需要注意以下几点:
(1)只有当通用类模板被声明后,特化才可以被定义。
(2)若定义了一个类模板特化,则必须定义与这个特化相关的所有成员函数或静态数据成员,此时类模板特化的成员定义不能以符号template<>作为打头。(template<>被省略)
(3)类模板不能在某些文件中根据通用模板定义被实例化,而在其他文件中却针对同一组模板实参被特化。
8.面试官:在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?
应聘者:事实上class用于定义类,在模板引入C++后,最初定义模板的方法为:“template<class T>”,这里class关键字表明T是一个类型,后来为了避免混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候可以使用下面的方式了:“template<typename T>”,在模板定义语法中关键字class与typename的作用完全一样。