c++ - 派生类中重载最终函数

标签 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!

最佳答案

B类中的这个声明

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

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

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

b->A::foo(); 

或者包括 using 声明

using A::foo;

在类B的定义中。

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

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

关于c++ - 派生类中重载最终函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28742142/

相关文章:

c++ - 在 MATLAB MEX 库中使用 boost,与 MATLAB 的版本不同

C++ thread assignment throwing SIGSEGV 收藏

c++ - 为什么在编译时选择这个虚方法的实现?

Java多态-如何判断是否调用父类(super class)方法和子类方法以及父类(super class)变量还是子类变量?

c++ - 将引用绑定(bind)到指针的语法是什么?(各种)

c++ - 在 Windows 中使用 cygwin 编译 ncmpcpp

c++ - 在 system32/drivers 文件夹中验证数字签名

c++ - 在没有引用的情况下复制构造函数的签名

c++ - 将模板函数指针作为模板参数传递给模板过于冗长

c++ - 阻止编译器优化的多态性示例?