C++对象模型和多态

本文探讨了C++中的多态性,重点介绍了虚函数、动态绑定、继承与转换、虚函数重写以及对象模型。通过单继承、双继承和菱形继承的对象模型分析,解释了虚继承如何解决菱形继承中的问题,揭示了C++多态性的底层实现机制。
摘要由CSDN通过智能技术生成

什么是多态?

多态是C++三大特性之一,它可以简单的概括为“一个接口,多种方法”,程序在运行时才能通过基类指针指向的对象的类型来决定调用那个函数,今天我们就要谈谈多态的底层的实现。

虚函数

C++多态是通过虚函数来实现的,所谓的虚函数,就是在类的成员函数返回值类型前面加上virtual关键字来定义的,在C++中允许派生类对基类的虚函数进行重写,一旦派生类对基类的虚函数进行重写,那么在派生类中,基类的虚函数将会被覆盖,如果我们想通过派生类的对象来调用基类的虚函数有两种方法,一种是通过访问限定符来调用;另一种方法是动态绑定

动态绑定

多态与非多态的实质性区别就是所调用的函数的地址是静态绑定(早绑定)还是动态绑定(晚绑定),如果函数调用的地址在编译期间就可以被确定,并产生相关代码,那么就是静态绑定;如果函数调用的地址是在运行时决定的,那么就属于动态绑定。

继承与转换

在C++中,封装是为了使代码啊模块化,继承是为了扩展已经存在的代码,两个特性都是为了达到代码重用的目的;而多态则是为了让接口能够被重用,也就是说,不论传递过来的是那个类的对象,函数都能通过同一个接口调用到适应各自对象的方法,实现这个技术最常用的方法就是定义一个基类的指针,利用指针指向任意一个子类的对象,调用相应的虚函数。如下图:
这里写图片描述

虚函数的重写

* 虚函数重写*:当在子类定义了一个与父类完全相同的虚函数时,则称这个子类的函数重写了父类的虚函数(函数名,参数列表,返回值完全相同协变除外)。
协变:当虚函数返回类型是类本身的指针或引用时,上述规则无效。
例如:

class Bas
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值