c++ - 带有实现的纯虚函数

标签 c++ pure-virtual

我的基本理解是没有纯虚函数的实现,但是,有人告诉我可能有纯虚函数的实现。

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

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

上面的代码可以吗?

让它成为一个带有实现的纯虚函数的目的是什么?

最佳答案

virtual 函数必须在将被直接实例化的派生类型中实现,但是基类型仍然可以定义实现。派生类可以通过使用全域名称(通过在您的示例中调用 A::f() - 如果 A: :f()publicprotected)。比如:

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++ 程序员,甚至是有经验的程序员都感到惊讶)。

关于c++ - 带有实现的纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089083/

相关文章:

c++ - 来自其他链接单元的垃圾

c++ - 从 V 表调用虚函数

C++的纯虚函数实现和头文件

c++ - 从使用模板的类继承时如何覆盖方法?

c++ - 如何从 OpenCV rvecs 计算旋转角度

C++ #include 和 operator<< 重载错误

c++ - 什么使某些东西成为 C++ 中的抽象类

C++11接口(interface)纯虚析构函数

c++ - 在 C++ 中选择两个纯虚函数之一

c++ - C++ 中有多少种字符串类型?