静态多态(编译期)
函数重载:
- 允许在同一个作用域中声明多个功能类似的同名函数
- 函数的参数列表不同(参数个数,参数类型,参数顺序)
- 注意:不能通过函数返回值区分(name mangling不包括返回值)
原理:
- 预编译:头文件的函数声明拷贝到源文件,避免编译过程找不到函数定义
- 编译:语法分析,同时进行符号汇总(函数名)
- 汇编:生成函数名到函数地址的映射,方便之后通过函数名找到函数定义的位置
- 链接:将多个文件的符号表汇总合并
*objdump -t o
- _ZN + 类长度+ 类名+ 函数名长度 + 函数名 + E + 类型首字母
模版:
- 编译期间进行实例化
- 性能要高,避免了运行时的开销
动态多态
虚函数重写,运行时确定
- 在基类的函数前面加上
virtual
关键字,派生类重写函数 - 运行时根据对象的类型调用相应的函数
- 如果对象的类型是基类,则调用基类的函数
- 如果对象的类型是派生类,调用派生类的函数
原理: