虚函数与纯虚函数

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,用来规范基类中的各个功能,派生类里面一定要实现这些功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值