C++中多态的实现原理:虚函数表与虚函数指针

本文探讨了C++中多态的实现原理,重点讲解了虚函数表和虚函数指针(VPTR)的作用。多态通过继承、函数重写和父类指针指向子类对象来实现。C++使用virtual关键字声明虚函数,编译器会生成虚函数表,并为每个对象分配一个VPTR指针,用于根据对象实际类型调用相应的虚函数,从而实现动态联编。此外,文章还讨论了VPTR指针的存在和虚函数执行效率的问题。
摘要由CSDN通过智能技术生成

1-多态

  1. 多态的实现效果:多态实现了同样的调用语句具有不同的表现形态。
  2. 多态成立的三个条件:继承、徐函数重写、父类指针指向子类对象。
  3. 多态的C++实现方法:virtual关键字,告诉编译器要执行多态;不要根据指针类型来判断如何调用对应的函数,而是要根据指针所实际指向的对象的类型来判断如何调用。
  4. 多态的理论基础:动态联编(if、switch、多态)、静态联编、根据指针实际指向的对象的类型来判断重写函数的调用。
  5. 多态的重要意义:多态是设计模式的基础。
  6. 实现多态的理论基础:函数指针做函数参数。
  7. C++中多态的实现原理:1.当在类中声明虚函数时,编译器会在类中生成一个虚函数表;2.虚函数表是一个存储类成员函数指针的数据结构;3.虚函数表由编译器自动生成与维护;4.带有virtual关键字的虚函数会被编译器放入到虚函数表中;5.当类族中存在虚函数时,类族定义的每一个对象都有一个指向虚函数表的指针(VPTR指针)。
  8. 利用VPTR指针,C++编译器根据父类指针实际指向的对象的类型,转到该对象的虚函数表中,去查找相应的虚函数进行执行,从而实现了多态。

2-虚函数

  1. 问题1:C++编译器是如何对虚函数进行特殊处理的?
  2. 问题2:指针做函数参数。使用父类形参指针,接受实参,编译器如何知道接收到的是父类对象还是子类对象的指针?
  3. 问题3:多态是C++中的类指针特有的现象,且只有符合多
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值