虚函数、虚指针、虚表

初识虚函数 

  • 虚函数是带有Virtual关键字的函数
  • 纯虚函数在虚函数之后加 =0 的函数
  • 虚函数是动态绑定的函数
  • 虚函数必须是非静态成员函数(因为静态成员函数是没有this指针的)
  • 析构函数可以是虚函数(减少内存泄漏)
  • 构造函数不能是虚函数(时间上冲突)

虚函数的声明

virtual  int ret()    ;

virtual 函数返回值类型   函数名  (参数列表)

   虚函数是可以进行重写的,子类中可以对虚函数进行重写,也可以不重写。

意义:为了实现多态性,也就是动态绑定

纯虚函数的声明

 virtual  int ret()    = 0;

virtual 函数返回值类型   函数名  (参数列表) = 0

  对于拥有纯虚函数的类来说,该类是一个抽象类。什么是抽象类?就是不能进行实例化的类,只能作为基类来使用。

  子类 必须对父类的纯虚函数进行实现,否则子类也为抽象类,不能进行实例化。

意义:为子类提供一个抽象给的接口,让所有子类都可以执行纯虚函数的动作,但是父类不能给子类提供一个缺省的实现。

 

虚指针和虚表

  •  当类中有虚函数的时候,就会生成一个虚指针和虚表,一个虚表对应一个虚指针。
  •  当该类为基类的时候,子类中如果重写了虚函数的话,虚表中对应的虚函数地址就会变化。
  •  虚指针是一个类对象的第一成员变量,它指向一个存储在只读数据段的虚表。
  •  虚表中存放的是当前类中所有的虚函数地址,是一个指针数组。
  •  虚表是对于一个“类”而言的,虚指针是对于一个“类对象”说的。
  •  同一个类创建不同的对象,其虚指针都指向同一个地址,也就是虚表是一样的。
  •  多重继承的时候,会存在多个虚指针
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值