构造具有多重继承的类
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。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- C++两次从文件保存对象读取多重继承
- 从多重继承中的派生类函数调用适当的父类函数
- C++具有多重继承的构造函数重载解析