构造具有多重继承的类

时间:2013-06-01 15:17:57

标签: c++ structure multiple-inheritance base-class

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

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

共享课程:

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

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

Serverside类:

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

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

Clientside类:

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',但这会导致我想避免的冗余,而且我不再能够使用单个指针任何一个类的对象,同时保持对所有共享方法的访问。

我不喜欢这些解决方案中的任何一个,但我想不出别的什么。 这个问题有最佳解决方案吗?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案我认为我认为解决你的具体问题的方法是让类BasePlayer不从类BaseEntity继承。

类Player将以BaseEntity类特性结束,因为它继承自类BaseEntity继承的类Entity,而类CPlayer最终将具有BaseEntity类特性,因为它继承自继承自BaseEntity类的CEntity类。