虚函数(动多态)的处理流程

多态: 同一接口 不同形态

1.静多态 编译阶段确定函数的调用(函数重载、模板)
2.动多态 运行时确定函数的接口(virtual触发、在运行时拿到函数的入口地址)
3.宏多态 预编译时确定函数的接口(很少涉及)
虚函数给予动多态支持

一个.cpp文件到一个.exe运行文件的过程:
1.编译
2.链接
3.运行

链接到运行过程中发生了什么?

备注:

  1. 符号表中存放的是函数的入口地址

  2. 在运行前所有的数据都是在磁盘上存储,运行时数据加载到内存中

1.合并段和合并符号表(所以在链接过后已经有了函数入口地址,但是此时的函数入口地址是存放在磁盘中的)
2.符号解析(把代码中的符号处理掉 在符号引用的地方找到符号定义的地方)
3.分配地址和空间
4.在text段进行符号的重定位
以Linux系统为例.o文件生成ELF文件格式
虚函数(动多态)的处理流程这样一来就实现了在运行时确定函数的接口,实现了动多态