最近面试了很多家公司,除了算法题,一部分面试官会问到程序语言(C++)相关的知识,也有的会到面向对象设计相关的知识。下面是一些我被问到的知识点,我把想到的答案整理了一下,欢迎大家批评指正。
C++ 语言特性
const
- const 的几种用法,如:常成员函数,不得修改类中的任何数据成员的值函数
int getValue() const;
(有一个面试官一口气给我写了三四个例子让我解释) - Q: What if xxx is immutable? A: use
const
keyword (算法题 follow-up)
inline 内联函数和宏的区别
- 宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的
- inline 内联函数有类型检查,具有函数特性;
- Q:推荐使用哪个?A:内联函数,减少二义性。
虚函数表
为了实现 C++ 的多态,C++ 使用了一种动态绑定的技术。这个技术的核心是虚函数表。(填空题)
指针和引用的区别
- 指针是存放变量地址的变量,可以被改变(其指向的地址,或者其指向的地址中所存放的数据)
- 引用必须被初始化,其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)
- 指针传递参数和引用传递参数:
- 指针:值传递的方式,在栈中开辟了内存空间存放实参的值,从而成为了实参的一个副本,不会影响主调函数的实参变量的值。
- 引用:被调函数的形式参数作为局部变量在栈中开辟了内存空间,存放实参变量的地址,被调函数对形参的任何操作都被处理成间接寻址,,所以被调函数对形参的操作会影响主调函数中的实参变量。
- Q:数组和指针的区别?(我被一家公司的两个面试官问了这个问题,应该是题库里的。)
- A:数组和指针本质上都代表一块内存,数组名即代表这块内存的地址,而指针本身不代表任何有意义的内容,只有赋值后,才表示一块有意义的内存地址。两者定义的时机不同:数组在编译时就已经被确定下来,而指针直到运行时才能被真正的确定到底其指向。