我目前正在用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