虚函数、纯虚函数、非虚函数到底有啥区别?

要想分清虚函数、纯虚函数、非虚函数,我们可以从公有继承的角度来区分,公有继承分为可覆盖的、不可覆盖的、提供默认实现的、未提供默认实现的这几种方式。

虚函数就属于提供默认实现的且可覆盖的类型,好比父辈建造了一个房子的框架,然后留给子辈自己去想象,子辈可以在里面做些装修,即覆盖,也可以什么都不做,继续原有框架,即默认实现。

纯虚函数属于未提供默认实现的且可覆盖的类型,类似于白手起家,没有默认实现,一切从头开始。

而非虚函数属于提供默认实现的且不可覆盖的类型,类似于直接继承父辈原有的建筑,即提供默认实现,且不能加以更改,即不可覆盖。

这三个继承方式的目的也不相同。

声明虚函数的目的在于:使得派生类继承函数的接口和缺省实现;声明纯虚函数的目的在于:使得派生类仅仅只是继承函数的接口;声明非虚函数的目的在于:使得派生类继承函数的接口和强制性实现。

这三者,都使得派生类继承函数的接口,毕竟父辈的房子都要继承下来,而区别在于,非虚函数使得派生类继承函数的强制性实现,因为它属于不可覆盖的类型,只能全部继承下来,而另外二者可覆盖,故没有强制性实现。还有一个区别就是,虚函数使得派生类继承函数的缺省实现,而纯 虚函 数相反,这是因为虚函数的继承方式中,父辈是有基本框架的,如果孩子不想再装修,那么直接住也行,即缺省实现,而纯虚函数必须要白手起家去自己实现装修。

(缺省实现就是:缺少或者省了不写的情况下,程序的实现方法。比如定义static int a;虽然没有初始化,但是程序会自动给a一个值)

这三个目的的不同,与上面对应公有继承方式一一对应,便可区分开来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值