虚函数

虚函数

重载:相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。

程序在编译阶段根据参数个数确定调用哪个函数。这种情况叫做静态多态(早绑定),一般用函数重载实现
如果要想实现动态多态则必须使用虚函数,虚函数用关键字 virtual声明
虚函数可能造成内存泄漏,因为如果delete后边跟父类的指针则只会执行父类的析构函数,如果delete后面跟的是子类的指针,那么它即会执行子类的析构函数,也会执行父类的析构函数。

用virtual去修饰析构函数可以解决这个问题,当我们在父类中通过virtual修饰析构函数之后,通过父类指针指向子类对象,通过delete接父类指针就可以释放掉子类对象
这是因为执行完子类的析构函数就会执行父类的析构函数

虚函数的限制:
1.普通函数不能是虚函数,也就是说这个函数必须是某一个类的成员函数,不可以是一个全局函数,否则会导致编译错误。
2.静态成员函数不能是虚函数 static成员函数是和类同生共处的,他不属于任何对象,使用virtual也将导致错误。
3.内联函数不能是虚函数 如果修饰内联函数 如果内联函数被virtual修饰,计算机会忽略inline使它变成存粹的虚函数。
4.构造函数不能是虚函数,否则会出现编译错误。

纯虚函数没有函数体,同时在定义的时候函数名后面要加“=0”。在虚函数原理的基础上,虚函数表中,虚函数的地址是一个有意义的值,如果是纯虚函数就实实在在的写一个0。
如果在抽象类当中仅含有纯虚函数而不含其他任何东西,我们称之为接口类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值