派生类中重载的最终函数

时间:2015-02-26 12:11:50

标签: c++ c++11 polymorphism overloading final

如何使用派生类的最终重载函数?
编译器说没有匹配函数来调用' 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!

1 个答案:

答案 0 :(得分:4)

B类声明

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

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

您可以像这样明确地调用该函数

b->A::foo(); 

或包括使用声明

using A::foo;

在B类的定义中。

或者您可以将指针强制转换为基类指针

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