C++ 虚函数与纯虚函数

虚函数与纯虚函数 在他们的子类中都可以被重写。它们的区别是:

(1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。

纯虚函数一般没有代码实现部分,如

virtual void print() = 0;

而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。

virtual void print()

{ printf("This is virtual function\n"); }

(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。

如果子类想要实例化,纯虚函数必须被重写,如果子类继承了包含纯虚函数的父类,却没有重写纯虚函数,那么子类相当于也继承了纯虚函数,子类也就变成了抽象类,不能被实例化。在多重继承关系中,纯虚函数在继承层次的任何一层被重写成非纯虚函数都可以。

假如C继承B,B继承A,A声明了纯虚函数,那么在B或者C中,至少要重写一次这个纯虚函数,如果在B中重写了,那么在C中可以不再重写。如果在B中把这个纯虚函数重写成了虚函数,那么相当于这个纯虚函数已经降级成虚函数,在C中按虚函数的方式对待,可以继续重写,也可不重写。如果在B中把纯虚函数重写成了非虚函数,那么在C中以及更低层次的继承中,就不能再重写了。

重写纯虚函数virtual void fun()=0;的方式:

virtual void fun() override;

或者

void fun() override;

重写虚函数的方式也一样。

不同的是,如果声明了虚函数,那么在cpp中必须有这个虚函数的定义。

前部分内容来自百度,后部分内容是自己的总结思考,如有错误,欢迎指正。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值