C++面试宝典2014版主要关注了以下几个关键知识点:
1. **动态内存管理**:
- C++提供了`new`和`delete`这两个运算符,它们分别用于动态内存的分配和释放。`new`在分配内存时不仅完成内存的分配,还会调用对象的构造函数,确保对象的初始化。而`delete`则负责调用析构函数来释放内存并清理对象。`malloc`和`free`是C/C++库函数,主要用于底层内存管理,但它们不能自动进行构造和析构,因为这些操作需要在编译器的控制下。
2. **delete与delete[]的区别**:
- `delete`仅对单个对象执行析构,适用于非数组类型。如果误用于数组,可能会导致错误,如案例中的-4行所示,`delete[]mTest2;`会尝试调用`MemTest`类型的析构函数,但由于`mTest2`实际上是指向单个对象的指针,这会导致运行时错误。
- 对于数组类型,如`int*pInt1 = new int[10];`,应使用`delete[]`来正确地释放内存,并确保每个元素的析构函数被调用。
3. **C和C++的共同点与不同点**:
- 共同点:C++是C语言的扩展,两者都支持内存管理(malloc和free)、指针操作等基本特性。
- 不同点:C++引入了面向对象编程的概念,包括类、对象、继承、多态等,同时有构造函数和析构函数,以及`new`和`delete`这样的高级内存管理工具。C++还提供了异常处理机制、模板、命名空间等特性,使得程序设计更为灵活和强大。
4. **类继承**:
- 类继承是C++中实现代码重用和模块化的重要机制。优点包括:
- **代码复用**:子类可以继承父类的属性和方法,避免重复编写相似的代码。
- **封装性**:子类可以扩展或修改父类的行为,保持接口的一致性。
- **层次结构**:创建类的层次结构有助于组织代码,清晰表示类之间的关系。
- 缺点:
- **耦合性**:继承可能导致类间的紧密依赖,如果父类改变,可能会影响到子类。
- **继承深度**:过深的继承层次可能导致性能问题和维护困难。
- **多重继承**:虽然C++允许多重继承,但可能会引发钻石问题(diamond problem)和菱形问题(菱形继承),设计不当会增加复杂性。
在准备C++面试时,掌握这些基础知识至关重要,它们可以帮助你在面试过程中展示对内存管理和面向对象设计的理解,以及对C++语言特性的熟练应用。