派生 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();
如何使用派生的最终重载函数 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();