C++抽象OOP(只继承派生类的某些方法)



假设我有一个套接字类:

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。有了这个技巧,我认为你可以达到同样的效果,但由于复杂性,我不推荐这种方法。

最新更新