这不是一个实际的编程问题,我只需要建议如何构建我的程序的一部分。
该程序分为客户端和服务器部分。两者都共享某些代码,包括基类。这是我遇到问题的代码的表示:
共享课程:
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',但这会导致我想避免的冗余,而且我不再能够使用单个指针任何一个类的对象,同时保持对所有共享方法的访问。
我不喜欢这些解决方案中的任何一个,但我想不出别的什么。 这个问题有最佳解决方案吗?
答案 0 :(得分:1)
最简单的解决方案我认为我认为解决你的具体问题的方法是让类BasePlayer不从类BaseEntity继承。
类Player将以BaseEntity类特性结束,因为它继承自类BaseEntity继承的类Entity,而类CPlayer最终将具有BaseEntity类特性,因为它继承自继承自BaseEntity类的CEntity类。