vc++笔试面试宝典.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
### vc++笔试面试宝典.pdf 知识点详解 #### 1. new、delete、malloc、free 的关系 - **new 和 delete**:`new` 和 `delete` 是 C++ 中用于动态内存分配和释放的运算符。使用 `new` 分配内存时,除了为对象分配内存空间之外,还会调用该对象的构造函数来初始化对象。当使用 `delete` 释放内存时,会先调用对象的析构函数,然后释放内存。 - **malloc 和 free**:`malloc` 和 `free` 是 C 语言标准库中的函数,用于动态内存分配和释放。`malloc` 分配内存但不会初始化对象,`free` 仅负责释放内存而不做任何额外的操作。 - **new/delete 与 malloc/free 的区别**:对于复杂的数据类型,如用户定义的类,仅使用 `malloc/free` 无法满足动态对象的要求,因为这些函数不处理构造函数和析构函数的调用。`new` 和 `delete` 可以确保构造函数和析构函数的正确调用,从而完成对象的初始化和清理工作。 #### 2. delete 和 delete[] 的区别 - **delete**:当使用 `delete` 释放由 `new` 分配的单个对象时,会调用该对象的析构函数。 - **delete[]**:当使用 `delete[]` 释放由 `new[]` 分配的数组时,会为数组中的每个元素调用析构函数,并且最后调用 `operator delete[]` 来释放整个数组占用的内存。 - **注意事项**: - 对于内置简单数据类型,如 `int`,`delete` 和 `delete[]` 功能相同。 - 对于自定义的复杂数据类型,如类,`delete` 和 `delete[]` 不能互换使用。 #### 3. C、C++、Java 共同点与不同之处 - **共同点**: - 都是面向对象编程语言(尽管 C 语言本身不支持面向对象特性,但可以通过结构体等手段模拟面向对象编程)。 - 使用相似的语法结构。 - 支持条件语句、循环结构等基本编程概念。 - **不同之处**: - **C**:是一种过程式编程语言,支持结构体和函数,但不具备真正的面向对象编程能力。 - **C++**:扩展了 C 语言,增加了类、继承、多态等面向对象特性,同时保留了 C 语言的所有功能。 - **Java**:完全面向对象的语言,强调安全性、平台独立性,不支持指针操作。 #### 4. 继承的优缺点 - **优点**: - 提高代码复用性:通过继承,子类可以复用父类的属性和方法。 - 易于维护和扩展:子类可以在继承的基础上添加新的功能,而无需修改父类的代码。 - **缺点**: - 编译期绑定:继承关系在编译时期就已经确定,无法在运行时更改。 - 紧耦合:父类的改动可能会影响到所有继承它的子类,导致代码的灵活性降低。 #### 5. C++ 的面向对象特性 - **封装**:将数据和方法捆绑在一起,对外部隐藏具体实现细节。 - **继承**:子类可以从父类继承属性和方法,实现代码复用。 - **多态**:允许子类重写父类的方法,实现灵活的行为。 #### 6. 子类析构时是否要调用父类的析构函数 - 在 C++ 中,析构函数的调用顺序是从派生类到基类。即当一个派生类的对象被销毁时,首先调用派生类的析构函数,然后依次调用基类的析构函数。 - **注意**:如果基类的析构函数是虚函数,那么派生类会调用正确的析构函数版本;如果不是虚函数,则可能导致错误的行为。 #### 7. 多态、虚函数、纯虚函数 - **多态**:同一接口多种实现的能力。 - **虚函数**:基类中声明为 `virtual` 的函数,可以在派生类中重写。 - **纯虚函数**:基类中声明为 `virtual` 并且函数体为空的函数,要求派生类必须提供具体的实现。 #### 8. 函数返回值计算 - 函数 `int func(int x)` 的功能是计算整数 `x` 二进制表示中 `1` 的个数。当 `x = 9999` 时,返回值为 `8`。 - **思路**:通过位操作,每次将 `x` 与其减去 `1` 后的结果进行按位与运算,直到 `x` 为 `0`。 #### 9. 引用的概念及注意事项 - **概念**:引用是现有变量的别名,对引用的操作实际上是对原始变量的操作。 - **注意事项**: - 引用声明时必须初始化。 - 一旦定义了引用,就不能改变它所引用的对象。 - 引用本身不是一种数据类型,不占用额外的内存空间。 #### 10. 引用作为函数参数的特点 - 当将引用作为函数参数时,本质上是传递变量的地址。 - **特点**: - 函数内部可以直接修改参数的值,这些修改会反映到外部调用者。 - 与传递指针相比,使用引用更安全,因为不需要担心空指针的问题。 - 无需显式解引用,使用更加直观和简洁。 - 提高效率,避免了复制大对象的成本。
- 粉丝: 10
- 资源: 15万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助