C++运行时的多态性


/*
派生类对象的地址赋给基类的指针,(也就是说用基类的指针指向派生类对象)
利用这个一个向上转型的特性,定义一个基类类型的指针数组,用指针指向各个不同的派生类对象,间接把派生类对象放在一个数组里,于是可以用循环批量处理
虚函数
*/


/*
初识虚函数:
1. 用virtual关键字说明的函数
2. 虚函数是运行时多态性的基础
3. C++中的虚函数是动态绑定的函数
4. 虚函数必须是非静态成员函数,虚函数经过派生后,就可以实现运行过程中的多态。
//为什么虚函数不可以是静态成员函数?
  因为静态函数是关联到整个类的,不关联到某一个对象,(没有this指针)
  只有非静态函数它才是属于对象的,因此虚函数必须是非静态函数
*/

/*
虚表与动态绑定:
虚表:
1. 每个多态类(只要这个类里有一个虚函数)都有一个虚表(virtual table)
//虚表可以认为里面放了一个指针数组,这个指针数组里的每一个指针都是指向他的虚函数的入口地址(函数代码在内存中的起始地址)
2. 虚表中有当前类的各个虚函数的入口地址
3. 每个对象有一个指向当前类的虚表指针(虚指针vprt)_vfptr
//对象里面存什么?对象里面存他自己的数据成员,如果这个类里有虚表,那么这个类除了存我们自己定义的数据成员以外,还会自动产生一个虚表指针指针也作为对象的成员,
  并且这个虚表指针是自动被初始化的,指针初始化指向自己的虚表
动态绑定的实现:
1. 构造函数为对象的虚指针赋值(会在构造函数时自动为虚指针赋值)
2. 通过多态类型的指针或引用调用成员函数时,通过虚指针找到虚表,进而找到所调用的虚函数的入口地址(函数代码的起始地址)。
3. 通过该入口调用虚函数
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值