从汇编角度审视C++多态实现

本文探讨了C++中的多态性,重点在于从汇编层面理解这一特性。通过示例代码展示了如何利用虚函数表实现多态,并讨论了引用类型与指针类型在汇编层面上的相似性和C++中的区别。文章还提供了反汇编代码以辅助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 何为多态

      多态是面向对象编程语言中的一种语言特性;多态意指一引用对象随着被引用对象的不同而表现出不同的行为特征。C++中,引用对象可以是一个指针类型,或者引用类型。

 

2. 多态的作用

      多态应用于类层次结构中,并且引用对象使用基类类型;要使用多态还需要基类中有虚函数。

      那为什么要使用多态呢? 一般,我们在使用基类类型引用时,不需要知道该引用指向类层次结构中具体哪一个类的实例,而只需要使用该类层次结构中的共有特征,也即基类所具有的特征(行为或状态),并且能够表现出所被引用对象的具体行为。这样,就可以忽略该类层次中的派生细节问题;这样的代码具有很好的可重用性和可维护性。

 

3. 示例代码如下:

程序运行输入如下:

 

4. 反汇编说明多态的实现

下面通过VS2008调试,反汇编上面代码。

首先,列出draw_shape函数的汇编代码如下:

       从上面的汇编代码可以看出,引用类型变量在汇编层次和指针完全一样;但在C++语言层次,应该搞清楚引用类型和指针类型的区别:  

  • 引用类型变量在定义是就必须初始化,并且被引用对象必须存在,也即不能为NULL;
  • 引用类型变量一经初始化,就不能再引用其他变量。 

上面的代码给出了对虚函数表的直接操作来访问函数,以及对类对象私有成员的直接操作。

 

PS:仅供交流学习之用;MSN:chryice@hotmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值