c++面试技巧-高级应用篇

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的作用完全一样。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值