首页 > 后端开发 > C++ > 虚拟函数与纯虚拟函数:有什么区别?

虚拟函数与纯虚拟函数:有什么区别?

Mary-Kate Olsen
发布: 2024-12-29 21:36:16
原创
344 人浏览过

Virtual vs. Pure Virtual Functions: What's the Difference?

虚函数解释:它们是什么以及它们与纯虚函数有何不同

在面向对象编程中,虚函数的概念是运行时多态性不可或缺的一部分。虚函数是一种可以在派生类中重写的函数,以在类层次结构的不同级别提供不同的实现。

虚函数和非虚函数之间的主要区别在于,最派生的版本当虚函数被重写时,在类层次结构的所有级别上使用。相比之下,非虚函数的功能在基类中保持不变,即使它在派生类中被重写也是如此。

以下示例说明了虚函数的行为:

struct Base {
    virtual ~Base() = default;

    virtual void foo() {
        std::cout << "Base::Foo" << std::endl;
    }
};

struct Derived final: Base {
    void foo() override {
        std::cout << "Derived::Foo" << std::endl;
    }
};
登录后复制

运行此代码会产生以下输出:

Base::Foo
Derived::Foo
Derived::Foo
登录后复制

如您所见,当调用 foo() 函数时在 Derived 类的实例上,即使通过基类指针 (Base* returned_as_base) 访问实例,也会使用 Derived::foo() 实现。

纯虚函数:特殊的Case

纯虚函数是需要在派生类中实现的虚函数。它没有在基类中定义,必须在派生类中重写以使该类具体化。具有一个或多个纯虚函数的类被认为是抽象的,不能直接实例化。

这是一个纯虚函数的示例:

struct Base {
    virtual ~Base() = default;

    virtual void foo() = 0;
};

struct Derived final: Base {
    void foo() override {
        std::cout << "Derived::Foo" << std::endl;
    }
};
登录后复制

在这种情况下,类 Base 是抽象,因为它包含一个纯虚函数 foo()。要使用此类,派生类必须实现 foo() 函数,使派生类成为可以实例化的具体类。

总之,虚函数允许您在不同级别重写基类功能。层次结构,而纯虚函数则需要派生类来实现特定的功能以使类具体化。理解这些概念对于在面向对象编程中编写可扩展和多态代码至关重要。

以上是虚拟函数与纯虚拟函数:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板