我正在制作一个用于控制网络数据包的小系统。我有以下课程:
- 数据包(具有检索和设置数据的功能)
- AuthPackets(继承数据包类)
- AuthSend(AuthPackets 的发送函数)
- AuthRecv(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 类的一部分,为什么它们必须继承 Packets?(已经继承了数据包)。
此外,如果我从 AuthSend 和 AuthRecv 继承 AuthPackets,我将失去调用函数的糖语法,如下所示:
authpackets.send.SecureToken
所以主要问题是为什么我的设计有缺陷?谢谢