【问题标题】:what is the advantage of a c++ class having static methods with exact same signature as the interface methods具有与接口方法完全相同签名的静态方法的 C++ 类的优势是什么
【发布时间】:2011-07-12 03:58:09
【问题描述】:

在实现它的类中定义具有与接口方法完全相同签名的静态方法有什么好处。

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

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

Impl::~Impl{
}

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

【问题讨论】:

  • 你在哪里见过这个?在您的示例中,Impl 仍然是一个抽象类,因为它永远不会覆盖 IInterface::fn
  • 在 3rd 方库中查看此内容。基本上'Impl'是一个包装器。 Impl::fn 的静态实现准确地调用了库方法 ex: Impl::fn() { :: fn() } 。我猜,这个接口是支持 Mock 测试的。如果那么它将如何有用?

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


【解决方案1】:

拥有这样的static 方法没有任何优势。 static 方法不会覆盖virtual 方法(它们总是非static)。

事实上它有缺点,您无法实现实际的方法来覆盖基本方法。因为在单个class 中不能有相同的方法签名(一个static 和另一个非static)。

class Impl :IInterface
{
public :
~Impl();
staic void fn();
void fn() {} // error: invalid (can't have same signature)
};

【讨论】:

    【解决方案2】:

    没有优势。

    您的派生类Impl 仍然是一个抽象类,因为它不会也不能覆盖纯虚函数。你不能创建它的任何对象。

    静态函数不能覆盖基类中的虚函数,因为动态多态性使用 this 在运行时评估函数调用,而静态函数不传递 this 指针,因为它们不是特定于任何对象。

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2018-05-05
      • 1970-01-01
      • 2015-10-23
      • 2020-02-13
      相关资源
      最近更新 更多