程序设计
1 new/delete和malloc/free区别二者都是用于分配控件和释放空间的。new/free是c++中支持的,后者是C语言中支持的,还需要头文件。new/free在使用的时候需要创建构造函数和析构函数,后者不需要。new/free能够自动计算所需要分配的内存空间,后者不可以。new/free返回相应类型的指针,后者返回的是void型指针,还需要一步强制转换。内存泄漏:资源申请后需要释放,否则会出现内存泄漏,内存的浪费2 符号起始区块、数据段(全局变量存放的地方)、代码段、堆、栈3 #include和#include "filename.h"
前者首先从标准库路径开始搜索,然后搜索本地。后者直接从用户的工作路径开始,然后搜索系统路径。
4 typedef和define区别
都是替一个对象取一个别名
原理不同,前者是在编译阶段进行,会做类型检查。而后者在预处理阶段,不做类型检查。前者用来定义类型的而别名,这些类型不只包含内部类型
5 struct和union区别
后者中所有成员共用一块内存区,前者中所有成员的空间是累加的。联合体中不同成员的赋值会造成覆盖。
6 c语言和c++中struct的区别
前者中的struct没有函数成员、没有访问权限的设定,struct之间没有继承关系。
7 重载和覆盖
重载:函数不同的参数表,对同名参数做修饰,然后这些同名参数就成了不同的函数
覆盖:派生类中存在重新定义基类的函数,函数名、参数类型、返回值必须同父类中相对应的被覆盖函数一致
8 变量分布的地方
全局变量、静态局部变量、静态全局变量:静态存储区
局部变量:栈
全局变量和静态变量异同点:二者都分布在静态存储区,生命周期和程序生命周期相同,不同在全局变量作用域是全局,静态变量具有稳健的作用域。
9 编译和链接的区别
编译:预处理、词法分析、语法分析、语义分析、优化编译生成若干个目标模块,将高级语言翻译成二进制代码,即机器语言
链接;链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完成的载入模型。在链接的时候,需要重定位一些符号。
载入:由载入程序将载入模块载入内存
10 面向对象,面向过程
面向对象:把数据和数据操作放在一起作为一个相互依存的整体,即对象。对同类对象抽象出共性,即类。
面向过程:是一种以事件为中心的开发方法,自顶向下,逐步求精。模块化的思想,每个模块相对独立,每一模块内部由顺序、选择、循环三个部分组成。
区别
出发点不同:前者按照常规化的思维方式来思考世界,把问题域映射到对象及对象的接口上。后者强调过程的抽象化和模块化。
层次逻辑不同:前者是类的继承和发展,后者是模块的层次结构
处理方式和控制方式:前者是事件驱动,后者是通过程序处理数据。
11 面向对象基本特征
封装、继承、多态
封装:将客观事物抽象成类。
继承:可以使用现有类的所有功能,不需要重新编写原来的类。实现代码的复用和支持多态。
多态:一个实体同时具有多种形式。在继承中,将父对象设置成为和一个或更多它的子对象相等,赋值以后,父对象就可以根据当前复制给它的子对象的特性以不同的方式运作。条件:要有继承,子类要有对父类的重写,父类引用指向子类的对象。
12 深拷贝和浅拷贝
它们的区别在于如果数据域是指针域的话,深拷贝不仅创建一个指针,而且分配了一块新的内存。浅拷贝只是创建一个指针使其指向原本的区域。
13 友元函数、友元类
可以访问类的私有成员
14 基类的构造函数和析构函数不能被派生类继承,子类需要声明。
java中final类不能被继承
15 空类默认产生成员函数:默认构造函数、复制构造函数、析构函数、赋值运算符重载函数、取址云算法重载函数