2013-04-03 22 views
-3

我有兩個類B和C-都是我的(非常原始的)遊戲中的怪物。我有一個名爲MOVE的函數,它現在只是改變怪物的X和Y座標。 B和C都來自A;所以A具有X和Y座標,B和C具有其他屬性,例如速度和攻擊。使用相同的函數來處理不同的類

有沒有一種方法可以設置一個功能,讓我可以通過B或C(因爲他們都需要能夠移動..),換句話說,不管是怪物被移動的是B或C - 但它會以相同的方式對待它們?

我在考慮通過A班,但我無法讓這個工作! :-((也許這只是我是極端缺乏經驗!)

非常感謝 - :-)

KJ

+1

什麼語言是你使用? – kamituel

+0

對不起,忘了提及我正在使用C++。現在增加了。抱歉的混淆。 – KingJohnno

+0

這就是所謂的多態性,你的第一本能至少部分是正確的。你的函數應該用'A'來實現,但要正常工作,你需要把它作爲一個引用('A&')或者(不是首選的)一個指針('A *')來傳遞。 – Chad

回答

2

實施作爲移動的功能。然後b和c都會有移動功能,然後你可以使用多態來移動b和c作爲a的子元素。

對於一個更重要的答案,一些代碼會真的有所幫助,當然還有你正在使用的語言。就你描述它的方式而言,有些事情聽起來不像在OO方面實現得很好。

+0

感謝您的意見。這是我第一個真正的'項目'。剛開始在C++世界。 – KingJohnno

1

使用可以實現在父母Amove方法:

class A { 
    private: 
    int X; 
    int Y; 

    public: 
    A() { X = 0; Y = 0; } 

    inline void move (int dx, int dy) { 
     X += dx; 
     Y += dy; 
     std::cout << "Moved to " << X << "," << Y << std::endl; 
    } 
}; 

class B : public A {}; 

class C : public A {}; 

然後,您可以使用這些類:

A objB; 
A objC; 

objB.move(0,1); 
objB.move(0,3); 
objC.move(2,0); 

此代碼將打印:

Moved to 0,1 
Moved to 0,4 
Moved to 2,0 
+0

這是一個很好的答案,但在這種情況下'A'不是抽象的。抽象類至少有一個_pure_虛函數。 – Chad

+0

這甚至沒有編譯。 –

+0

@KerrekSB - 真的,我是在不編譯的情況下編寫的,然後決定將它擴展成一個完整的類。即使現在我跳過了main(),因爲這不是重點。但是你是對的,我通過分離兩個代碼塊來清楚地說明了這一點。 – kamituel

相關問題