假设我有一个套接字类:
class Socket{
public:
... Some Code ...
Socket(int type){
isServer = type;
//some code
}
virtual void Send(string s);
virtual void Send(string s, int clientID);
... Some Code ...
private:
int isServer;
};
这将同时用作服务器和客户端。
现在我需要2个派生类:
class ClientSocket : public Socket{
public:
... Some Code ...
};
class ServerSocket : public Socket{
public:
... Some Code ...
};
我想要的是ClientSocket将只能访问Send(string)
,而服务器socket将只访问Send(string, int)
我检查了其他答案:
- https://stackoverflow.com/a/20997981/14911094
这有一个很好的想法,那就是根本不使用继承,而只是封装(在服务器中有一个套接字实例(。但我想知道这是否可以使用继承来完成。
但我的想法是:
创建两个类(类似接口(:
第一类是服务器套接字发送器:
Class ServerSocketSender {
public:
virtual void Send(string s, int clientID);
}
第二类是客户端套接字发送器:
Class ClientSocketSender {
public:
virtual void Send(string s);
}
由于接口分离原则,我建议您这样做,将两个send方法组合在一个类中,并在desired类中启用desired方法是不明智的选择。
我看了很多次,但我不知道它在你的情况下是否有效的另一个技巧是SFINAE。有了这个技巧,我认为你可以达到同样的效果,但由于复杂性,我不推荐这种方法。