gpt4 book ai didi

c++ - 构造具有多重继承的类

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:13 25 4
gpt4 key购买 nike

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

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

共享类:

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

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

最佳答案

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

类 Player 将具有 BaseEntity 类特征,因为它继承自类 Entity,类 Entity 继承自类 BaseEntity,而类 CPlayer 将具有 BaseEntity 类特征,因为它继承自类 CEntity,类 CEntity 继承自类 BaseEntity。

关于c++ - 构造具有多重继承的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com