C++编译的过程?
预处理->编译->汇编->链接。
- 预处理:
预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 - 编译:
将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。 - 汇编:
将编译完的汇编代码文件翻译成机器指令,并生成可重定位目标程序的.o文件,该文件为二进制文件,字节编码是机器指令。 - 链接:
通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。
C++ 编译过程简介
静态链接和动态链接的区别?
在链接过程中,静态链接和动态链接就出现了区别。静态链接的过程就已经把要链接的内容已经链接到了生成的可执行文件中,就算你再去把静态库删除也不会影响可执行程序的执行;而动态链接这个过程却没有把内容链接进去,而是在执行过程中,再去找要链接的内容,生成可执行文件中并没有要链接的内容,所以当你删除动态库时,可执行程序就不能运行。
动态链接生成的可执行文件要比静态链接生成的文件要小一些。
多态?
可以简单地概括为“一个接口,多种方法”。
多态的作用?
- 隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
- 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。
静态多态和动态多态?
静态多态:函数重载和运算符重载属于静态多态,复用函数名;
动态多态:派生类和虚函数实现运行时多态。
区别:
- 静态多态的函数地址早绑定,在编译阶段确定函数地址;
- 动态多态的函数地址晚绑定,运行阶段确定函数地址。
动态多态满足条件: - 有继承关系;
- 子类重写父类的虚函数。
C++---静态多态与动态多态