具有与接口方法具有完全相同签名的静态方法的c ++类的优点是什么?

时间:2011-07-12 03:58:09

标签: c++ static-methods virtual-method

使用与实现它的类中的接口方法完全相同的签名来定义静态方法的优点是什么。

class IInterface
{
public:
  virtual void fn()=0;
}

class Impl :IInterface
{
public:
  ~Impl();
  static  void fn();
}

Impl::~Impl{
}

Impl::fn(){
 //do something
}

2 个答案:

答案 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指针,因为它们是不是特定于任何对象。