虚函数与纯虚函数

本文介绍了C++中的虚函数和纯虚函数。虚函数用于实现多态,允许基类指针调用派生类的重写方法。纯虚函数则在基类中作为接口定义,要求派生类必须实现。通过实例展示了虚函数和纯虚函数的用法及不使用虚函数时的运行结果。纯虚函数类似于Java的接口,确保派生类实现特定功能。
部署运行你感兴趣的模型镜像

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

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值