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