C++ 多态 polymorphic 编译时期多态
来源:互联网 发布:帝国cms标签工具 编辑:程序博客网 时间:2024/05/21 15:23
C++面试官必问的一个问题
简单的来说,多态就是 一个函数 有多种实现。
多态里面最关键的一个问题就是,实际调用的时候到底调用的是哪一个具体的实现!
依据 这个函数最后被确定下来的时期 分为编译时期多态 和 运行时期多态
下面对这两种做一下简单的介绍
多态可以分为编译时期多态和运行时期多态
编译时期多态 在编译的时候就能够确定被调用的函数
同名函数,根据参数的个数或者参数类型的不同实现的多态
最常见的例子,就是构造函数的多态了,如下所示,
class Test{public: Test(){ cout<<"This is Test()"<<endl; } Test(int x){ cout<<"This is Test(int x)"<<endl; } Test(int x, int y, int z, int a, int b, int c){ cout<<"This is Test(int x)"<<endl; } Test(char x){ cout<<"This is Test(char x)"<<endl; } Test(float x, float y){ cout<<"This is Test(char x)"<<endl; } Test(long long x, long long y){ cout<<"This is Test(char x)"<<endl; }};
那么调用的时候,调用的到底是哪一个构造函数呢?其实编译器对函数进行了重命名,加上了参数类型,
首先使用 g++ -g test.app
然后使用 strings - a.out | grep Test 搜索二进制文件中的可见字符
__ZN4TestC1Ev //Test()
__ZN4TestC1Ei //Test(int x)
__ZN4TestC1Ec //Test(char x)
__ZN4TestC1Eff //Test(float x, float y)
__ZN4TestC1Exx //Test(long long x, long long y)
__ZN4TestC1Eiiiiii //Test(int x, int y, int z, int a, int b, int c)
note: 所以的函数被调用之后符号表里才能找得到哦! 否则以上的函数符号是找不到的!
那么当你写Test(4.54f, 45f),编译器一看你传了两个float,就直接把这句翻译成了__ZN4TestC1Eff,从而实现调用Test(float x, float y)的目的。
- C++ 多态 polymorphic 编译时期多态
- C++ 多态 polymorphic 运行时期多态
- Polymorphic form--多态表单
- Java--多态(polymorphic),上下转型,多态好处弊端
- java多态polymorphic多态的理解一
- java多态polymorphic多态的理解二
- 多态(polymorphic)
- Rails 多态关联 :polymorphic => true
- java多态polymorphic多态的理解四之多态的优点
- 编译时期和运行时期的区别
- has_many through(多对多) 与polymorphic(多态)混合使用
- rails 多态关联 (:polymorphic => true)
- polymorphic-associations多态关联实例 ruby on rails
- java多态polymorphic多态的理解三之向上转型和向下转型及优与不足
- 编译时期的聚合赋值
- objc - 编译时期的Category
- java中Abstract中的灵活运用(polymorphic)[多态的表现]
- 机器码下的多态类型推导-Polymorphic type inference for machine code
- Java - PAT - 1004. 成绩排名 (20)
- linux的文件系统
- oracle:运行时结构组成(instance ,后台进程)
- ADO.NET之查询结果转换如性别
- Unable to create/open lock file: /data/mongod.lock解决方法
- C++ 多态 polymorphic 编译时期多态
- 数据结构之二叉排序树
- IOS Dev Intro - Raw Bitmap Modification
- windows,mac 和linux 以及unix
- VNC、VPN等几个基本概念
- sublime test3 安装quick-cocos2d-x 代码补全插件
- Linux下文件的三种时间属性
- Python的上下文管理器
- leetcode:Symmetric Tree