C++面试必备知识精华版

需积分: 3 2 下载量 190 浏览量 更新于2024-08-01 收藏 685KB DOC 举报
"c++笔试面试宝典2009版" C++是计算机编程领域中一种重要的编程语言,尤其在面试和笔试中,对C++的理解深度常常是评估候选人技术能力的重要标准。以下是一些核心知识点的详细说明: 1. **new、delete、malloc、free关系**:`new` 和 `delete` 是C++中的动态内存管理操作符,用于对象的创建和销毁,而`malloc`和`free`是C语言中的内存管理函数。`new`会调用构造函数,`delete`调用析构函数,而`malloc`和`free`不涉及对象生命周期管理。 2. **delete与delete[]区别**:`delete`用于释放单个对象的内存,而`delete[]`用于释放数组的内存,它会逐个调用数组元素的析构函数。 3. **CC++JAVA共同点与不同之处**:共同点包括都是面向对象的编程语言,都有类的概念。不同之处在于C++支持运算符重载和模板,而Java更注重平台独立性,有垃圾回收机制。 4. **继承的优缺点**:优点是可以实现代码复用,提高可扩展性;缺点是可能导致类的层次复杂,增加理解和维护难度。 5. **C++的面向对象特性**:包括封装、继承和多态。 6. **子类析构是否调用父类析构**:子类析构函数通常会隐式地调用父类的析构函数,以确保父类的资源得到正确释放。 7. **多态、虚函数、纯虚函数**:多态是C++的特性之一,虚函数使得基类指针可以调用派生类的函数,纯虚函数是定义抽象类的,没有实现,必须由派生类来实现。 8. **微软的面试题**:具体的题目未给出,通常这类题目会涉及C++语法或特定的编程技巧。 9. **引用的定义和使用注意事项**:引用是一个已存在对象的别名,声明时必须初始化,且不能改变引用对象。 10. **引用作为函数参数**:引用作为参数传递时,函数内部对参数的修改会影响到原始变量。 11. **常引用**:常引用用来确保引用的对象不会被修改,提供额外的安全性。 12. **引用作为返回值**:可以避免拷贝开销,但需要注意生命周期管理,确保返回的引用对象在返回后仍有效。 13. **引用与多态**:引用可以指向派生类对象,从而支持多态。 14. **引用与指针的区别**:引用没有空值,一旦初始化后不可更改,而指针可以改变所指对象。 15. **使用引用的场景**:当需要传递对象的副本时,但又希望保持原对象的可变性,或者为了优化性能,避免拷贝。 16. **结构与联合的区别**:结构是所有成员各自占用独立的内存空间,而联合的成员共用同一块内存空间。 17. **联合题目**:具体题目未给出,可能涉及位字段、内存对齐等概念。 18. **关联、聚合、组合**:关联是对象之间的一般关系,聚合是部分与整体的关系,组合是强聚合,部分对象的生命周期与整体对象绑定。 19. **面向对象的三个基本特征**:封装、继承、多态。 20. **重载与重写**:重载在同一作用域内,函数名字相同但参数列表不同;重写(覆盖)发生在派生类中,子类重新定义了基类的虚函数。 21. **多态的作用**:实现代码的通用性和灵活性,允许不同对象对同一消息做出不同的响应。 22. **Ado与Ado.net**:Ado是基于COM的数据库访问技术,Ado.net是.NET框架中的数据库访问组件,提供了更强的异步处理和数据缓存功能。 23. **newdelete与mallocfree**:new/new[]负责对象的构造和析构,malloc/free只做内存分配和释放,不涉及对象管理。 24. **#defineDOUBLE(x)x+x,i=5*DOUBLE(5)**:i的值为25,预处理器宏展开后变为i=5*(5+5)。 25. **初始化列表与赋值**:构造函数需要初始化成员时,必须用初始化列表,而赋值操作适用于已经构造的对象。 26. **C++类型安全**:C++是类型安全的语言,但不完全类型安全,比如指针和整数间的转换可能会引发问题。 27. **main前的代码**:在main之前,C++会进行全局变量的初始化,静态对象的构造,以及C运行时库的初始化。 28. **内存分配方式**:包括栈分配(自动变量)、堆分配(new操作符)、静态分配(全局变量和静态局部变量)和寄存器分配(编译器优化决定)。 29. **struct与class的区别**:主要在于默认访问权限,struct是公有的,class是私有的。 30. **空类的大小**:在大多数实现中,空类的大小是1字节,用于内存对齐。 31. **8086逻辑地址和物理地址转换**:8086采用段页式存储管理,逻辑地址由段地址和偏移地址组成,通过段寄存器和段基址计算得到物理地址。 32. **C++的类型转换方式**:包括隐式转换、显式转换(static_cast, dynamic_cast, reinterpret_cast, const_cast)。 33. **变量与零的比较**:例如 `(BOOL)a == 0`,`(int)a != 0`,`(float)a != 0.0f`,`(ptr) != NULL`。 34. **const与#define**:const更安全,能进行类型检查,而#define是简单的文本替换,可能导致类型错误。 35. **数组与指针的区别**:数组是一个固定大小的连续内存区域,指针是内存地址,可以动态分配和解引用。 36. **成员函数的重载、覆盖和隐藏**:重载是在同一作用域内,函数名相同但参数列表不同;覆盖发生在派生类中,子类函数与基类同名同参数;隐藏是指派生类中同名函数屏蔽了基类的同名函数。 37. **找出两数中的较大值**:可以使用条件运算符(三目运算符)或if语句实现。 38. **打印文件名和行号**:可以使用预处理器宏`__FILE__`和`__LINE__`。 39. **main执行完毕后的执行**:在大多数情况下,main函数执行完毕意味着程序结束,但某些系统环境下,如嵌入式系统,可能会有其他代码继续执行。 以上知识点涵盖了C++基础、内存管理、面向对象特性、异常处理等多个方面,对于C++的笔试和面试具有很高的参考价值。