-
C++语言中的`const`关键字有什么作用?为什么要使用`const`关键字?
1 const修饰的变量将会被放到常量区,避免被意外的改动。
const修饰的常量比#define修饰的有更多的优势,比如可以调试,类型检查等
2 const修饰的参数可做输入型参数
对于const指针类型,可以避免修改,而如果是const引用类型可以省去临时对象的构造和析构过程,提高效率
3 const修饰返回值
如果你不希望返回值被修改,可以用const修饰返回值
4 const修饰成员函数
对于类中不会修改成员变量的成员函数,可以声明为const成员函数
2. C++语言中的类有什么作用?
类体现了C++面向对象的特点。
类的基本思想在于抽象和封装。
数据抽象是一种依赖于接口和实现分离的技术。类的实现包括类的数据成员,负责接口实现的函数体以及定义类所需的各种私有函数。
数据抽象之和我们就可以就行复用。进而实现继承、多态
而封装则是实现了类的接口和实现的分离,隐藏实现细节。
我可以举个操作系统的例子:
操作系统对下管理软硬件资源,而对上为用户、程序员提供良好的服务。而对下管理硬件的时候,看似不同的硬件实际上都有读写文件的方法。结合Linux系统一切皆文件的思想下,我们只需实现出struct file类,再实现多态,就能封装成不同的硬件了。在struct file这一层,所有外设就没有硬件的差别了。
3. C++语言中类的继承有什么作用?在什么场景下应该使用类的继承?
继承允许我们以基类的方式来实现派生类。
继承的使用一般会和组合一起讨论。组合是一种复用关系。组合之间的依赖关系不强,耦合度低;而继承是一种耦合度高的方案,继承一定程度上破坏了封装。
我们推荐多使用组合,但是当多种子类拥有共同的特征时,我们还是
可以使用继承,而且,如果要实现多态,必须使用继承
4. 全局变量的定义是否可以放在.h文件里?
全局变量的定义不能放到头文件里,如果头文件被多个.c/.cpp文件包含,就会生成多份,最后导致多重定义的错误
5. 什么是编译?什么是链接?
在ANSIC中我们的程序会经历会通过翻译环境、运行环境两种
其中翻译环境就有两个步骤:编译、链接
编译阶段分又为三个阶段:预处理,编译,汇编
预处理主要做4个事:去注释,宏替换,头文件展开,条件编译。然后我们的 .c/.cpp文件会变成 .i文件
编译会进行语法分析、词法分析、语义汇总、符号汇总等。我们的代码就转成了汇编代码,然后我们的 .i文件会变成 .s文件
汇编阶段会将上一步的汇编代码转成二进制代码。并生成符号表。然后我们的 .s文件会变成格式为elf的 .o文件
链接阶段主要进行合并段表和符号表的合并和重定位
.o文件是elf格式的,会分为很多段,合并段表就是把相同的段合并到一起
6. 你最近在读哪些(技术有关)书?或你最近在研究哪些和技术有关的内容?
我最近在看两本书,一本是《Effective C++》,这本书为C++程序员提供了一系列实用的建议和技巧,帮助他们在编写高效、健壮和易于维护的代码时避免常见的陷阱和错误;
另一本是《STL源码剖析》,侯捷老师的讲解生动、细致、全面,对我理解STL的底层非常有帮助。
注意:
- 允许合理使用搜索引擎,允许查阅书籍与网络上的公开资料。
- 题目内容要求独立完成,不允许由他人代答,不允许使用AI生成回答。
- 本题目限时1小时。
(挂了竟然,没想到)