基本概念--虚函数、纯虚函数

在java中,(override重写)方法默认是支持动态绑定,通过这种方式Java实现多态;也就是当父类引用指向一个子类对象时,会根据指向的对象实际类型决定调用的方法实现;
在C++中,默认是不支持这种功能的,要实现类似的功能,方法需要声明成虚函数,也就是要用virtual关键字修饰;
注意:在父类中声明的虚函数,在子类中如果有相同的函数声明,即使子类函数不加virtual关键字,函数也是虚函数
虚函数可以有默认实现,类似于Java中的抽象类中有默认实现的方法

下文引自虚函数必须实现么????

实例化类的虚函数必须有定义,原因如下:有虚函数作为成员函数的类, 它的实例化-对象, 在运行过程分配到的内存不止是它的成员数据, 还有一个指向该类虚函数表(vtable)的指针, 虚函数表中的每个数据项都是一个虚函数的入口地址; 如果一个对象的虚函数只有声明而没有实现, 就会出现这个虚函数表找不到本应作为其数据项之一的某函数的入口地址, 虚函数表在运行前不能装载完成, 所以产生连接错误!

如果要定义一个抽象类,例如Shape来抽象所有的形状,其方法最好定义成纯虚函数
非虚函数的虚函数如果未实现会报链接错误,如下
这里写图片描述

纯虚函数

纯虚函数更多的是为了提供接口,纯虚函数不能有默认实现
语法:virtual void fun()=0;
纯虚函数可以类比Java接口方法和抽象类中的被抽象方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值