I - 常规题
1.1 - struct 与 class 的区别
- 成员的默认访问权限不同,struct 为 public, class 为 private
- 默认的继承方式不同,未声明时 struct 为 public 继承,class 为 private 继承。
struct 与 class 可以互相继承,默认继承方式取决于子类。 - struct 关键字不能够定义模板类型,示例:
template<class T> // 正确 template<struct T> // 错误
1.2 - sizeof 与 strlen 的区别
- 性质不同, sizeof 为操作符,strlen 为函数
- 计算时间不同,sizeof 为编译时计算,strlen 为运行时计算
- strlen 只能计算
char *
字符串长度 ,sizeof 可计算结构体等其他类型占用内存大小 - 等等
1.3 - delete 与 free 的区别
- delete 为操作符, free 为函数
- free 只释放动态分配的内存, delete 还会调用析构函数
- ...
III - 综合应用
考察内存分区,类 相关知识
3.1 - 一个未初始化的类类型的指针调用类内部的函数,在什么情况下程序会崩溃,什么情况下不会崩溃,以及为什么?
- 调用静态成员函数和未使用成员变量的成员函数时不会崩溃,因为程序运行时函数位于代码段,是静态的,成员变量位于堆区或者栈区,
- 调用其他成员函数时会崩溃
- 调用虚函数会崩溃,因为函数位于代码段是静态的,但虚表与虚表指针使用的是动态的内存。
总结:所有涉及到 this 指针解引用的情况都会崩溃。