使用与实现它的类中的接口方法完全相同的签名来定义静态方法的优点是什么。
class IInterface
{
public:
virtual void fn()=0;
}
class Impl :IInterface
{
public:
~Impl();
static void fn();
}
Impl::~Impl{
}
Impl::fn(){
//do something
}
答案 0 :(得分:0)
使用static
方法没有优势。 static
方法不会覆盖virtual
方法(始终为非static
)。
实际上它有缺点,无法实现实际的方法来覆盖基本方法。因为在一个class
(一个static
和另一个非static
)中无法使用相同的方法签名。
class Impl :IInterface
{
public :
~Impl();
staic void fn();
void fn() {} // error: invalid (can't have same signature)
};
答案 1 :(得分:0)
没有优势。
您的派生类Impl
仍然是抽象类,因为它不会&不能覆盖纯虚函数。你不能创建它的任何对象。
静态函数不能覆盖Base类中的虚函数,因为动态多态在运行时使用this
来计算函数调用,而静态函数不会传递this
指针,因为它们是不是特定于任何对象。