2014-01-26 55 views
0

有人偶然知道從C++的抽象類中的靜態方法調用非靜態方法的解決方法?從抽象類中的靜態方法調用非靜態方法(C++)

例如,我有以下的抽象類:

class aClass 
{ 
    public: 
    static int check(); 
    virtual int check_deep()=0; 
} 

,我想打電話給check_deep()形式檢查()

在此先感謝, 朱迪思。

+0

你想做的事情沒有任何意義。如果您需要幫助,最好知道*您想要做什麼,而不是*如何*。這些功能做什麼? –

+0

您需要一個'aClass'實例來調用虛擬方法'check_deep':它應該是哪一個? – user3146587

回答

0

不會,因爲一個非靜態方法綁定到一個類的實例(您稱爲this),而靜態方法不綁定到任何實例:將不會有任何實例thischeck_deep綁定到check

顯然,假設你將從子類中調用它,否則check_deep是純虛擬的,你將無法調用它。

0

沒辦法。非靜態方法需要一個對象來執行,而在你的情況下,當它是純虛擬的時,對象甚至會決定調用哪一個確切的方法。您絕對需要aClass類型的對象來調用check_deep。

1

你需要改變你的靜態方法的簽名接收基準(或指針)的aClass一個實例可以這樣做:

class aClass 
{ 
    public: 
    static int check(aClass& instance); 
    virtual int check_deep()=0; 
} 

int aClass::check(aClass& instance) 
{ 
    return aClass.check_deep(); 
} 

設計smells莫名其妙,但!