1

这不是一个实际的编程问题,我只需要关于如何构建我的程序的一部分的建议。

该程序分为客户端和服务器部分。两者共享某些代码,包括基类。这是我遇到问题的代码的表示形式:

共享课程:

class BaseEntity
{
public:
    virtual void EmitSound(std::string snd) {}
    virtual bool IsPlayer() {return false;}
};

class BasePlayer
    : public BaseEntity
{
public:
    bool IsPlayer() {return true;}
}

服务器端类:

class Entity
    : public BaseEntity
{
public:
    void EmitSound(std::string snd)
    {
        // Serverside implementation
    }
}

class Player
    : public Entity,BasePlayer
{
public:
    void Kick() {}
}

客户端类:

class CEntity
    : public BaseEntity
{
public:
    void EmitSound(std::string snd)
    {
        // Clientside implementation
    }
};

class CPlayer
    : public CEntity,BasePlayer
{
public:
    void SetFOV() {}
}

(这些方法只是示例)

“Player”类应该继承“Entity”和“BasePlayer”的所有成员。但是,这不起作用,因为两者都具有相同的父类(BaseEntity)。

我当然可以从“BasePlayer”中删除继承,但最终会得到两个“IsPlayer”函数,每个函数都返回不同的东西。

我也可以将所有成员从“BasePlayer”分别移动到“Player”和“CPlayer”,但这会导致我想避免的冗余,并且我不再能够对任何一个对象使用单个指针类,同时保持对所有共享方法的访问。

我不喜欢这两种解决方案,但我想不出别的。这个问题有最优解吗?

4

1 回答 1

1

我认为可以解决您的特定问题的最简单的解决方案是让 BasePlayer 类不继承自 BaseEntity 类。

类 Player 将以 BaseEntity 类特征结束,因为它继承自类 BaseEntity 的 Entity 类,而类 CPlayer 将以 BaseEntity 类特征结束,因为它继承自类 BaseEntity 的 CEntity 类。

于 2013-06-01T16:13:22.583 回答