首页 >后端开发 >C++ >C 中的纯虚拟函数可以实现吗?为什么要这样做?

C 中的纯虚拟函数可以实现吗?为什么要这样做?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-18 04:11:09713浏览

Can Pure Virtual Functions in C   Have Implementations, and Why Would You Do That?

纯虚函数:实现和目的

在 C 中,纯虚函数通常与声明方法的接口而不提供其实现相关联。但是,可以有一个带有实现的纯虚函数,如下所示:

class A {
public:
    virtual void f() = 0;
};

void A::f() {
    cout << "Test" << endl;
}

虽然此代码在语法上是有效的,但其目的和用法需要进一步解释。

提供纯虚函数实现的目的:

基类可以定义纯虚函数的实现函数,即使派生类需要提供它们自己的实现。此实现的目的可以是:

  • 默认行为: 提供派生类可以继承的默认行为。但是,派生类必须显式调用 A::f() 才能利用此默认行为。
  • 通用功能: 定义可由所有派生类重用的一组通用功能。通过在基类中提供实现,派生类可以选择调用此通用功能及其自己的自定义。

如何调用基类实现:

派生类可以使用全作用域调用纯虚函数的基类实现名称:

class B : public A {

    virtual void f() {
        // class B doesn't have anything special to do for f()
        //  so we'll call A's

        // note that A's declaration of f() would have to be public 
        //  or protected to avoid a compile time problem

        A::f();
    }

};

用例:

考虑一个方法有合理的默认行为的场景。然而,类设计者希望仅显式调用此默认行为。在基类中提供纯虚函数的实现允许派生类根据需要访问和使用此默认行为。

注意:

虽然技术上可以提供纯虚函数的实现,这是一种不常见的做法,并且可能会导致混乱。因此,除非有明确且正当的理由,否则一般建议避免这样做。

以上是C 中的纯虚拟函数可以实现吗?为什么要这样做?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn