c++ 多态的定义和实现

定义

编译时多态: 在程序编译过程中出现,发生在模板和函数重载中(泛型编程)。
运行时多态: 在程序运行过程中出现,发生在继承体系中,是指通过基类的指针或引用访问派生类中的虚函数。

本文主要讲解运行时的多态:

多态就是不同继承类的对象,对同一消息做出的不同响应,基类的指针指向或绑定到派生类的对象,使得基类指针呈现不同的表现形式。

构成多态的条件

  • 在基类的函数前加上 virtual 关键字,在派生类中重写该函数;
  • 调用函数的对象必须是指针或引用。

运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

实现

多态是通过虚函数实现的,虚函数的首地址存在虚函数表中,虚函数表的地址存在含有虚函数的类的实例对象的内存空间中。
实现过程

  1. 在类中用 virtual 关键字声明虚函数;
  2. 存在虚函数的类都有一个虚函数表,当创建该类一个对象时,会生成一个指向虚函数表的虚表指针(虚函数表对应类,虚表指针对应对象)。
  3. 当基类指针指向派生类的对象时,基类指针调用虚函数时,基类指针指向派生类的虚表指针,由于该虚表指针指向派生类的虚函数表,在表中遍历查找相应的虚函数。

继承和多态

继承:程序向上总结

将子类共同的行为和属性集中写到父类中,通过继承,所有子类都能自动获得这些属性和行为,大大减少了重复代码。

继承成为多态实现的基础。

多态:程序向下扩展

父类某些行为,子类进行继承重写,从而实现:同种行为,不同的实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值