虚函数与纯虚函数
Posted bitcarmanlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚函数与纯虚函数相关的知识,希望对你有一定的参考价值。
1.虚函数
虚函数是 C++ 实现动态单分派子类型多态(dynamic single-dispatch subtype polymorphism)的实现方式。
方法前面加上virtual关键字,即为虚函数。
看下面的例子:
#include<iostream>
using namespace std;
class A
public:
virtual void func()
cout<<"A::func() is running!"<<endl;
;
class B: public A
public:
void func()
cout<<"B::func() is called"<<endl;
;
int main(int argc, char const *argv[])
A *p = new B();
p->func();
return 0;
运行代码得到的结果为:
B::func() is called
如果我们将A中func函数的virtual关键字去掉,运行得到的结果为
A::func() is called
需要注意的是:
1.虚函数并不代表函数没有被实现,只有定义一个函数为纯虚函数时,才代表函数没被实现。
2.定义一个虚函数的目的,是为了使用基类的指针来调用子类的函数。
2.纯虚函数
纯虚函数是基类中声明的虚函数。与虚函数的不同在于,他在基类中没有定义,但要求任何派生类都要定义自己的实现方法。实现方式为在基类中函数原型后加“=0”
#include<iostream>
using namespace std;
class A
public:
virtual void func()=0;
;
class B: public A
;
int main(int argc, char const *argv[])
A *p = new B();
p->func();
return 0;
上面的代码,在IDE中,会提示我们
allocating an object of abstract class type 'B'
不允许使用抽象类类型 "B" 的对象:C/C++(322)
virtual_code.cc(15, 16): 纯虚拟 函数 "A::func" 没有强制替代项
在B类中实现func方法
class B: public A
public:
void func()
cout<<"this is func running!"<<endl;
;
此时再运行就能得到输出
this is func running!
3.使用场景
1.对于虚函数来说,其主要作用是使用基类的指针,在指向派生类的时候,还能正确调用派生类里面的不同实现方法,最终达到实现多态的目的。
2.对于纯虚函数,本质就是相当于java中的接口interface,用来规范基类中的各个功能,派生类里面一定要实现这些功能。
以上是关于虚函数与纯虚函数的主要内容,如果未能解决你的问题,请参考以下文章