我目前正在用C++開發一個遊戲。現在我是C++的初學者,只是想習慣多繼承的概念。我的遊戲有一個玩家類。該玩家類從定位繼承(賦予玩家x和y座標)和可移動(允許玩家移動)。問題在於Moveable必須知道玩家的配合才能充分調動他。這裏是什麼,我試圖完成基本僞(ISH)代碼:C++將父指針傳遞給父類構造函數
class Movable
{
private:
Positionable *positionable;
public:
Movable(Positionable *positionable)
: positionable(positionable)
{ }
void Translate(float x, float y)
{
positionable->setX(positionable->getX() + x);
positionable->setY(positionable->getY() + y);
}
}
class Positionable
{
private:
float x, y;
public:
Positionable(float x, float y)
: x(x),
y(y)
float getX() { return this->x; }
float getY() { return this->y; }
float setX(float val) { this->x = val; }
float setY(float val) { this->y = val; }
}
class Player : public Positionable, public Movable
{
Player(float x, float y)
: Positionable(x, y)
: Movable((Positionable) this)
{ }
}
...
Player player;
player.Translate(50, 50)
我的問題是是否有更好的方式來傳遞Positionable
動產的constuctor,因爲如果Moveable
依賴於3個班,我將不得不寫一些像Movable((FirstClass) this, (SecondClass) this, (ThirdClass) this)
。這看起來很糟糕。有什麼辦法可以更好地解決這個問題嗎?
的「I」前綴表示你的意思是有接口的,但你沒有任何的多態行爲,實際創建的具體類(無虛函數) 。建議是跳過'我'不要混淆你自己或他人。 –
爲什麼不確定IMovable繼承自IPositionable,因爲它需要位置才能移動並使Player從IMovable繼承?然後在構造函數中讓Player調用IMovable,然後inturn調用具有x,y值的IPositionable。 這不會解決你的問題嗎? –
你不必投(而且你投錯了類型:缺少'*')。 – Jarod42