关于班级组成
About class composition
本文关键字:于班级 更新时间:2023-10-16
我正在制作一个用于控制网络数据包的小系统。我有以下课程:
- 数据包(具有检索和设置数据的功能)
- 身份验证数据包(继承数据包类)
- AuthSend (AuthPackets 的发送函数)
- AuthRecv (recv functions for AuthPackets)
因此,根据我的理解,AuthSend 和 AuthRecv 是 AuthPackets 的组合,但它们都需要 Packets 类来实现功能。
所以代码看起来像这样:
class Stream {
private:
int position;
void* packet;
void* get_streampointer();
public:
void Skip(int bytes);
void NewPos(int pos);
void SetShort(short Data);
void SetInt(int Data);
void SetStringRef(StringRef* stringref);
short GetShort();
int GetInt();
void GetStringRef(StringRef* storedata);
};
class Packets : public Stream {
public:
void PacketEncrypt();
void PacketDecrypt();
short Size;
short Type;
};
class AuthPackets: public Packets {
AuthSend send;
AuthRecv recv;
bool Protocol(Player* player);
};
class AuthSend: public Packets {
public:
void SecureToken(short SecurCode);
void EncSecureToken(short SecurCode);
};
class AuthRecv: public Packets {
public:
bool SecurCode(Player* player);
};
问题是为什么AuthSend和AuthRecv必须继承数据包,如果它们是AuthPackets类的一部分?(已经继承了数据包)。
另外,如果我从AuthSend和AuthRecv继承AuthPackets,我将失去调用以下函数的糖语法:
authpackets.send.SecureToken
所以主要问题是为什么我的设计有缺陷?感谢
AuthSend 和 AuthRecv 应该继承自一个名为 Packet 的可能抽象的基类(注意:单数)。为什么您的 AuthPackets 类包含每种类型的成员,而不仅仅是通用功能?如果您需要一个类来保留身份验证数据包本身,则它不应从数据包继承。
您需要有关您正在尝试执行的操作的更多信息才能获得完整的答案。
好吧,我将尝试在这里为您的问题提供解决方案(我认为是); 如果您使用公共内容中的任何内容,它们确实需要从数据包继承:在 AuthSend 和 AuthRecv 中的数据包中。它们不是AuthPackets的一部分,它们只是AuthPackets中的对象。无论如何,您不会影响您的 AuthSend 和 AuthRecv 定义,因为在另一个具有公共的类中声明一个对象:数据包。我不明白你的意思是"设计中的缺陷",如果你想使用数据包中公开的东西,这里的一切对我来说似乎都很好。如果我错过了,请在此处提供有关您的问题的更多信息。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- QT在错误的班级中寻找空位
- c++r值引用应用于函数指针
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何仅使用对象名称打印特定于对象的成员
- 相当于LocaleMatcher的ICU4C
- 等<thing>效于char32_t
- 类似于strcat()的函数出现问题
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 算术运算的结果类似于:C浮点变量中的1/3
- 相当于 pybind11 中的 boost::p ython py::scope().attr()
- 班级的朋友是不可接近的
- 如何将记忆应用于此递归函数?
- 对对应于矩阵的行和列的对向量进行排序
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- createFile() 和 DeviceIoControl() 等效于 Unix/Linux 中的卷设备
- 为什么内存屏障依赖于变量?