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/61956184/

相关文章:

c++ - 获取包含windows系统目录的盘符

c++ - boost::asio 无法从文件中读取超过 65536 个字节

C++面试继承谜题

c++ - 反向链接列表时,析构函数中的内存错误

c++ - 初始化列表是否适用于基类?

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

c++ - 使用对象作为类的构造函数的参数时出错

c++ - 为什么 MSVS 允许 NULL 作为纯虚函数说明符?

c++ - 编写自定义纯虚拟处理程序 : What is the state of the stack and registers when it is called

c++ - 0在纯虚函数中是什么意思