我希望这个问题还没有在其他地方得到解答,我确实搜索了一个答案,但是不能很好地规范搜索。C++当派生类没有从接口实现函数时该怎么办
问题是,我有一个武器抽象类武器需要的统计数据(如准确性,损坏等)。这是一个抽象类,因为有些武器对重装和破坏有不同的实现方式,但其中大多数武器没有。
Weapon类具有DoT(结构体)成员以及getDoT成员函数。
问题是,并非所有的武器都有DoT。但是在代码中的某个时刻,在处理攻击时,Weapon :: getDoT被调用。当然,我之前添加了“has_DoT()”方法,所以我不处理单元化的DoT对象,但这是一个相当糟糕的解决方案。
处理这个问题的最佳方法是什么?当并非所有派生对象实际上都拥有抽象类中的成员?
我以为首先没有DoT成员/ getDoT成员函数,只是在派生类Weapon_With_DoT上实现它们,但由于我的抽象类是Weapon,我仍然需要检查是否武器有一个DoT,然后从武器类型转换为Weapon_With_DoT来访问Weapon_With_DoT :: getDoT成员函数。这也是不合理的,只是相反。
我希望问题能够以足够清晰的方式解释。 :)
如果不是所有的武器都有DoT,那么它可能不应该在顶级抽象类中。是否有武器的子类具有该属性?我会考虑为什么一些武器有这个属性,有些不是从设计的角度来看。 – Joe
乔是绝对正确的。应该使用顶级抽象类来定义常见行为。这种差异应该定义在较低的水平。 – Greg
事后看来,只有在界面中定义了常见行为才有意义,但如果代码的其余部分使用武器作为界面,您将如何处理该问题? – deso