2011-07-12 63 views
1

在实现它的类中定义具有与接口方法完全相同的签名的静态方法的优点是什么?具有与接口方法具有完全相同签名的静态方法的C++类有什么优势

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

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

Impl::~Impl{ 
} 

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

你在哪里看到这个?在你的例子中,'Impl'仍然是一个抽象类,因为它永远不会覆盖'IInterface :: fn'。 –

+0

在第三方库中查看。基本上'Impl'是一个包装。 Impl :: fn的静态实现简单地调用了libray方法ex:Impl :: fn(){:: fn()}。我想,接口是支持模拟测试。如果那么它将如何有用? – Somaraj

回答

0

有没有这样的static方法的优势。方法不会覆盖virtual方法(它们始终不是static)。

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

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

没有优势。

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

因为动态多态性使用this评估在运行时该函数调用静态函数不能重写从基类的虚拟函数,而静态功能不通过this指针,因为它们是不特定于任何物体。

相关问题