有人偶然知道從C++的抽象類中的靜態方法調用非靜態方法的解決方法?從抽象類中的靜態方法調用非靜態方法(C++)
例如,我有以下的抽象類:
class aClass
{
public:
static int check();
virtual int check_deep()=0;
}
,我想打電話給check_deep()形式檢查()
在此先感謝, 朱迪思。
有人偶然知道從C++的抽象類中的靜態方法調用非靜態方法的解決方法?從抽象類中的靜態方法調用非靜態方法(C++)
例如,我有以下的抽象類:
class aClass
{
public:
static int check();
virtual int check_deep()=0;
}
,我想打電話給check_deep()形式檢查()
在此先感謝, 朱迪思。
不會,因爲一個非靜態方法綁定到一個類的實例(您稱爲this
),而靜態方法不綁定到任何實例:將不會有任何實例this
將check_deep
綁定到check
。
顯然,假設你將從子類中調用它,否則check_deep
是純虛擬的,你將無法調用它。
沒辦法。非靜態方法需要一個對象來執行,而在你的情況下,當它是純虛擬的時,對象甚至會決定調用哪一個確切的方法。您絕對需要aClass類型的對象來調用check_deep。
你需要改變你的靜態方法的簽名接收基準(或指針)的aClass
一個實例可以這樣做:
class aClass
{
public:
static int check(aClass& instance);
virtual int check_deep()=0;
}
int aClass::check(aClass& instance)
{
return aClass.check_deep();
}
設計smells莫名其妙,但!
你想做的事情沒有任何意義。如果您需要幫助,最好知道*您想要做什麼,而不是*如何*。這些功能做什麼? –
您需要一個'aClass'實例來調用虛擬方法'check_deep':它應該是哪一個? – user3146587