### C++面试宝典2011知识点解析 #### 一、new、delete、malloc、free 关系 **new 和 delete** - **new**: C++中的关键字,用于动态分配内存,并调用对象的构造函数。 - **delete**: 用于释放通过`new`分配的内存,并调用对象的析构函数。 **malloc 和 free** - **malloc**: C/C++标准库函数,用于动态分配内存,不调用构造函数。 - **free**: 用于释放通过`malloc`分配的内存,不调用析构函数。 **总结**: - 对于需要初始化的对象,应使用`new`和`delete`。 - `malloc`和`free`适用于原始数据类型或者不需要构造和析构的对象。 #### 二、delete 与 delete[] 区别 - **delete**: 用于释放单个对象的内存,并调用一次析构函数。 - **delete[]**: 用于释放数组对象的内存,并为数组中的每个元素调用析构函数。 **示例代码分析**: ```cpp MemTest *mTest1 = new MemTest[10]; MemTest *mTest2 = new MemTest; // 正确使用 delete[] mTest1; // -3- delete mTest2; // 正确,释放单个对象 // 错误使用 delete[] mTest2; // -4- 报错,因为mTest2不是数组 ``` **注意事项**: - 使用`new[]`分配的内存必须使用`delete[]`释放。 - 对于非数组对象,使用`delete`即可。 #### 三、C/C++/JAVA 共同点与不同之处 **共同点**: - 都支持面向对象编程。 - 都具有基本的数据类型,如int、float等。 - 支持循环结构和条件判断。 **不同之处**: - **C/C++**: 支持低级内存管理(手动分配和释放内存),C++还支持高级抽象如类、模板等。 - **Java**: 自动垃圾回收机制,不支持指针,提供了更多的安全性保障。 - **C++**: 强调性能和效率,支持模板和泛型编程。 - **Java**: 更注重平台独立性和安全性,更适合大型分布式系统开发。 #### 四、继承的优点与缺点 **优点**: - 提高代码的复用性和模块化程度。 - 父类的修改不会直接影响子类,除非子类显式覆盖了父类的方法。 **缺点**: - 继承关系在编译时确定,无法在运行时更改。 - 父类的变化可能会影响到所有继承它的子类,降低了系统的灵活性。 #### 五、C++ 的面向对象特性 - **封装**: 将数据和方法绑定在一起,隐藏对象的实现细节。 - **继承**: 子类继承父类的属性和方法。 - **多态**: 同一个接口可以有多种不同的实现方式。 **示例**: - 当子类对象销毁时,会先调用子类的析构函数,然后再调用基类的析构函数。 #### 六、多态、虚函数、纯虚函数 **多态**: 指同一个接口在不同的环境中表现出不同的行为。在C++中主要通过虚函数实现。 - **虚函数**: 基类中的函数前加上`virtual`关键字,子类可以重写这个函数。 - **纯虚函数**: 形式为`virtual void func() = 0;`,必须在子类中实现。 #### 七、函数题目解析 **题目**: ```cpp int func(int x) { int countx = 0; while (x) { countx++; x = x & (x - 1); } return countx; } ``` **解析**: - 此函数用于计算整数`x`的二进制表示中`1`的个数。 - 当`x = 9999`时,二进制表示为`10011100001111`,包含8个`1`,因此返回值为8。 #### 八、引用的理解与使用 **定义**: - 引用是一个变量的别名,不占用额外的存储空间。 - 在声明引用时必须进行初始化。 **使用注意事项**: - 引用声明后不可重新指向其他变量。 - 不可声明引用数组。 - 引用作为函数参数时,实际上是传递变量的地址。 **总结**: C++面试宝典2011涵盖了C++语言的核心概念和技术要点,包括内存管理、面向对象编程、数据结构等方面的知识。理解这些概念是成为一名合格C++程序员的基础。
剩余55页未读,继续阅读
- 粉丝: 1
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助