派生 class 中重载最终函数

Overloaded final function in derived class

如何使用派生的最终重载函数 class?
编译器说“没有匹配函数来调用 'B::foo()'”。

class A
{
public:
    virtual void foo() final
    {
        std::cout << "foo";
    }
    virtual void foo(int b) = 0;
};

class B : public A
{
public:
    void foo(int b) override
    {
        std::cout << b;
    }
};

//Somewhere
B* b = new B;
b->foo(); //Error

但它可以在不重载的情况下工作。

class A
{
public:
    virtual void foo() final
    {
        std::cout << "foo";
    }
};

class B : public A
{
};

//Somewhere
B* b = new B;
b->foo(); //Works!

这个声明在classB

void foo(int b) override
{
    std::cout << b;
}

隐藏在 class A 中声明的所有其他同名函数(当然不包括被覆盖的函数)。

您可以像这样显式调用函数

b->A::foo(); 

或包括使用声明

using A::foo;

在定义class B.

或者你可以将指针转换为基class指针

static_cast<A *>( b )->foo();