2011-07-12 61 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指針,因爲它們是不特定於任何物體。

相關問題