构造具有多重继承的类

Structuring classes with multiple inheritance

本文关键字:多重继承      更新时间:2023-10-16

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

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

共享类:

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() {}
}

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

这两个解决方案我都不喜欢,但我想不出别的办法。这个问题是否有最佳解决方案?

我看到的最简单的解决方案,我认为将解决您的具体问题将是有类BasePlayer不从类BaseEntity继承。

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