我同意 Jon 的观点,但假设你仍然需要一个单独的伤害计数器类,你可以这样做:
class IDamageable {
virtual DamageCounter* damage_counter() = 0;
};
class DamageCounter {
...
};
每个可损坏的类都需要提供自己的 damage_counter() 成员函数。这样做的缺点是它为每个可损坏的类创建了一个 vtable。您可以改为使用:
class Damageable {
public:
DamageCounter damage_counter() { return damage_counter_; }
private:
DamageCounter damage_counter_;
};
但是当多个父对象具有成员变量时,许多人不酷具有多重继承。