虚函数与纯虚函数的定义,作用,区别

虚函数与纯虚函数:

(1)什么是虚函数?

虚函数:动态绑定的基础,是非静态的成员函数。被 virtual 关键字修饰的成员函数称为虚函数:在类成员方法的声明(不是定义)语句前加“virtual”, 如 virtual void func()。

虚函数的作用:是实现多态性,即通过基类访问派生类的函数。

virtual 只用来说明类声明中的原型,不能用在函数实现时。具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。本质:不是重载声明而是覆盖

调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。

其实完全可以不用父类类型的指针,直接创建子类对象来调用子类的普通函数也是可以的啊,为什么非要使用虚函数呢?

虽然这样说,但是实际开发过程中不是这样的,当我们使用一些类库、框架的时候,这些类库、框架是事先就写好的。我们在使用的时候不能直接修改类库的源码,我们只能派生类库中的类来覆盖一些成员函数以实现我们的功能,但这些成员函数有的是由框架调用的。这种情况下,用虚函数是很好的办法。

(2)什么是纯虚函数?

在虚函数后面添加 =0 ,虚函数就成为纯虚函数:如 virtual void func()=0;。

在很多情况下,基类生成对象很不合理。为了解决这个问题,引入了纯虚函数的概念,将函数定义为纯虚函数,派生类中必须重写实现纯虚函数。对于实现了纯虚函数的子类,该纯虚函数在子类中就变成了虚函数。

(3)虚函数和纯虚函数有什么区别?

  • 虚函数定义形式:成员函数前添加 virtual 关键字,纯虚函数在虚函数后添加 =0 ;
  • 含有纯虚函数的类,称为抽象类;只含有虚函数的类,不能称为抽象类。
  • 虚函数既可以直接使用,也可以被子类重载实现后,以多态的形式调用;而纯虚函数必须被子类重载实现,才能以多态的形式调用,因为纯虚函数在基类中只有声明。
  • 无论虚函数还是纯虚函数,定义中都不能有 static 关键字。因为 static 关键字修饰的内容在编译前就要确定,而虚函数、纯虚函数是在运行时动态绑定的。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值