我正在制作一个用于控制网络数据包的小系统。我有以下课程:
所以根据我的理解,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类的一部分,它们必须继承Packet? (已经继承了Packets)。
此外,如果我从AuthSend和AuthRecv继承AuthPackets,我将失去调用这样的函数的糖语法:
authpackets.send.SecureToken
所以主要的问题是为什么我的设计存在缺陷? THX
答案 0 :(得分:0)
AuthSend和AuthRecv应该从一个名为Packet的可能抽象的基类继承(注意:单数)。为什么您的AuthPackets类包含每种类型的成员,而不仅仅是常用功能?如果你需要一个类来保存auth数据包本身,它不应该继承Packet。
完整答案需要有关您要执行的操作的更多信息。
答案 1 :(得分:0)
好吧,我会尽力解决(我相信的)你的问题;如果您使用的是公共内容中的任何内容,它们确实需要从Packets继承:在AuthSend和AuthRecv中的数据包中。它们不是AuthPackets的一部分,它们只是AuthPackets中的对象。无论如何,通过在另一个具有public:of Packets的类中声明一个对象,您不会影响您的AuthSend和AuthRecv定义。如果你想在Packets中使用一些公开的东西,我觉得这里的一切似乎都很好,我不明白你是怎么说“设计中的一个缺陷”。如果我错过了,请在此处提供有关您的问题的更多信息。