我一直得到非常直接的回答,如“如果要创建的子类是父类的一个子类型,请使用继承。”这在我做小项目时有效,但当我开始开发2D游戏引擎时,我遇到了冲突的情况。
假设我有一个基类GameObject,它有50个函数和5个成员变量,为了方便起见。这些函数包括设置器、获取器、动画函数、渲染、移动等等。对于我的玩家和敌人来说,这是一个完美的基类。
但我还有像道具和装备之类的对象,只需要(而且我只想能够访问)从GameObject继承的10个函数。我的物品仍然可以被定义为GameObject,但它不会移动或有任何动画。
在这种情况下该怎么办?我应该继承并忽略多余的函数,从而创建浪费内存的情况吗?我应该重写那10个函数,浪费时间吗?我应该将GameObject作为Item和Prop的私有成员变量,再次浪费内存,但允许我阻止访问任何不需要的函数吗?还是我应该从GameObject中删除所需的10个函数,并将它们放在一个单独的头文件中,创建一个辅助函数库?
编辑:
感谢回复。几乎所有人都建议将GameObject类分成更好定义的基类或使用组合。
假设我有一个基类GameObject,它有50个函数和5个成员变量,为了方便起见。这些函数包括设置器、获取器、动画函数、渲染、移动等等。对于我的玩家和敌人来说,这是一个完美的基类。
但我还有像道具和装备之类的对象,只需要(而且我只想能够访问)从GameObject继承的10个函数。我的物品仍然可以被定义为GameObject,但它不会移动或有任何动画。
在这种情况下该怎么办?我应该继承并忽略多余的函数,从而创建浪费内存的情况吗?我应该重写那10个函数,浪费时间吗?我应该将GameObject作为Item和Prop的私有成员变量,再次浪费内存,但允许我阻止访问任何不需要的函数吗?还是我应该从GameObject中删除所需的10个函数,并将它们放在一个单独的头文件中,创建一个辅助函数库?
编辑:
感谢回复。几乎所有人都建议将GameObject类分成更好定义的基类或使用组合。
PropObject
类,它扩展了GameObject
,重写了应该忽略的10个函数以抛出异常,然后从任何“道具对象”中扩展PropObject
。 - newfurniturey