實現第二種情況唯一的一點是如果我想從一個Collidable派生而不是一個對象?如果是這樣的話,第一起案件何時有利,因爲第二起案件提供了更大的靈活性。哪種類型的繼承更可取?
兩個collidables只有一個純虛函數,Object是可以在屏幕上繪製的對象的基類(在我的情況下)。
^假設我正確理解下面的代碼(我也不太清楚TBH)
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
編輯:
基於馬特/賽斯
class Object
class Collidable
class Clickable
class Trackable
class BlowUppable
class Actor : public Object, public Collidable, public Clickable, public Trackable,
public BlowUppable
class SomeObjectThatIsTakenForGrantedThatEverythingElseIsInherited : public Actor
第一個例子是第二種情況,第二種情況是第一種情況。我想這是我看到的第一個案例的唯一用途。
@Luchian
這將是一個與原來不同的問題,因爲你的答覆既不是。
在這種情況下,是否存在將對象從is-a變爲has-a關係的區別?在每種情況下,爲了檢查碰撞,對象必須有一個標誌來知道是否應該檢查碰撞。在你的情況下,成員可以檢查它是否爲null,但在派生的情況下,對象本身告訴它是否可以碰撞。在數組/樹中,我可以將派生對象作爲參數傳遞,或者使用get()方法將hitbox作爲參數傳遞。
更深入,我有另一個類 - 使用所述第二殼體
class Hitbox : public Object, public Collidable
和Actor類具有它作爲一個部件,其有碰撞將具有擊中格
class Actor : public Object
{
Hitbox *box;
};
對象相反,這代表你的職位準確,我認爲。但是,我仍然感到,當我再次查看你的例子時,這是否意味着Hitbox應該有一個Collidable成員呢?
class Hitbox
{
Collidable *collision;
};
我有什麼:
一個演員擁有它處理衝突
擊中格應該做的一擊中格:
繼承可碰撞或
有無可碰撞的成員
演員已經下你的約定。 Hitbox應該這樣做嗎?
如果你是第一次做的話,你不必擁有一個「CollidableTrackableClickableBlowuppableObject」。它只是一個繼承自Collidable,Trackable,Clickable和Blowuppable的類,就像第一種方式一樣,但是你不會像第一種方式那樣繼承Object。我不確定第一個是否更有用;不應該所有的'Clickable's都可以繪製到屏幕上嗎?如果你把它們全部分開,你不能分辨出你的Object是可點擊的還是你的Clickable是可繪製的。第二種方法,你知道'Clickable'是可繪製的。 – 2012-07-17 21:14:26
如果你做了_second_我想說的話,你就不必有...了。 – 2012-07-17 21:42:13