【发布时间】:2026-02-02 17:00:01
【问题描述】:
抱歉这个丑陋的问题,但我不知道如何措辞。我举个例子来说明我的意思:
人类可以是法师或战士,因此法师和战士可以从人类继承。但是,如果兽人也可以兼得呢?我们不能说“人就是战士”或“战士就是人”。 Orc 和 Human(或父类 Humanoid)是否继承了所有技能,然后选择使用什么?
我不知道是否应该标记特定语言,因为这是关于 oop 的一般问题,但由于不同的语言可以有不同的方法来解决相同的问题,我更喜欢从 C++ 的角度来回答。
【问题讨论】:
-
这是一个有点争议的话题,但是 c++ 确实支持多重继承:cprogramming.com/tutorial/multiple_inheritance.html - 使用多重继承,人类可以是战士或法师,而兽人可以也可以是战士或法师。不一定推荐这样做。
-
@neminem 但是,如果您只为每个子对象使用其中一个类,可以从一堆类继承吗?
-
“好的”由您决定。这当然是允许的 - 在这种情况下,你的“Humanoid”类可能更干净拥有“Class”和“Race”属性,然后拥有这些类和种族从它们各自的基类继承,而不是让你的 Humanoid 直接从类和种族继承。但你可以这样做。 (有时我真的希望 C# 确实支持多重继承......)
-
这里多重继承的问题是你需要有 N^2 个 final 类,所以每个种族和类的组合都会有一个类(例如@ 987654322@)。这很快就会失控。
标签: c++ oop inheritance