C++ Abstraction OOP(只继承一些方法派生class)

C++ Abstraction OOP (Inherit only some method to derived class)

假设我有一个插座class:

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 个 Derived classes:

class ClientSocket : public Socket{
public:
    ... Some Code ...
};

class ServerSocket : public Socket{
public:
    ... Some Code ...
};

我想要的是 ClientSocket 只能访问 Send(string) 而服务器套接字只能访问 Send(string, int)

我检查了一些其他答案:

这是一个好主意,完全不使用继承,而只是封装(在服务器中有一个套接字实例)。但是我想知道这是否可以使用继承来完成。

做这样的事情没有绝对的方法。

但我的想法是:

创建两个class(类似接口):

第一个 class 是服务器套接字发送者:

Class ServerSocketSender {
  public:
    virtual void Send(string s, int clientID);
}

第二个class是客户端套接字发送者:

Class ClientSocketSender {
  public:
    virtual void Send(string s);
}

由于接口隔离原则,我建议你做这样的事情,将两个发送方法合并为一个 class 并在 desire class 中启用 desire 方法是不明智的选择。

另一个我见过很多次但我不确定它是否适用于您的情况的技巧是 SFINAE。通过这个技巧,我认为您可以实现相同的目的,但由于复杂性,我不推荐这种方法。