派生类中的final函数重载

Overloaded final function in derived class

本文关键字:函数 重载 final 派生      更新时间:2023-10-16

如何使用派生类的最终重载函数
编译器说"对"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!

B类中的此声明

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

隐藏在类A中声明的具有相同名称的所有其他函数(当然不包括overriden函数)。

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

b->A::foo(); 

或者包括使用声明

using A::foo;

在B类的定义中。

或者您可以将指针投射到基类指针

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