链继承

时间:2013-10-27 13:27:58

标签: c++ inheritance

目前我有两个类,Drawable和Transformable,像Actors这样的东西继承了这两个类,问题是当我将对象绘制到屏幕上时,我迭代了一个Drawables向量,它没有包含在Transformable中的getPosition()函数。向Drawable添加虚拟getPosition()可解决此问题,但随后会在其他位置创建对函数的模糊调用问题。那么我可以使用Drawable继承Transformable和Actor继承Drawable并获得与继承这两个类相同的结果吗?

编辑:Drawables不是所有的actor,有些是sprite(游戏对象),原始形状等。实际上我在draw循环中需要getPosition()的唯一原因是因为为了伪造深度,我循环通过从0 Y坐标到屏幕底部的矢量,首先绘制屏幕上方的对象,然后在靠近“前”的对象后面。我没有编写Drawable / Transformable类,我宁愿不必完全改变它们以便在一个实例中满足一个函数调用。这是一个问题的唯一时间是我引用Drawables的向量。对我来说,为什么设计它的方式并不是很有意义,因为使用drawable类的所有内容也都继承了可转换类,因此它们应该只是一个,但它们不是。

我的问题是:

class foo {}
class bar{}
class foobar : public foo, public bar {}

与此相同

class foo {}
class bar : public foo {}
class foobar : public bar {}

对象是否可以继承父级继承的类的公共成员和受保护成员?

2 个答案:

答案 0 :(得分:0)

在这种情况下,我选择的设计是删除Transformable类,并将位置属性和成员函数移动到Drawable类。某些“可绘制的”需要在某处绘制,因此需要一个位置,无论它是否可以移动。

  

对象是否可以继承父级继承的类的公共成员和受保护成员?

简短而甜蜜:是的。 (仅当继承为publicprotected

有关继承类型的更多信息,请参阅this

答案 1 :(得分:0)

考虑一个不可绘制的对象是否会首先被转换。为什么要移动一些永远不会被看到的东西。

另外,getPosition(可能是setPosition)实际上不应该是可绘制的东西的一部分吗?你怎么知道在哪里画它。

我强烈建议您仔细重新考虑您的类结构,结合常见的功能,不要因为可以而拥有数百万个不必要的接口。