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。通过这个技巧,我认为您可以实现相同的目的,但由于复杂性,我不推荐这种方法。
假设我有一个插座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。通过这个技巧,我认为您可以实现相同的目的,但由于复杂性,我不推荐这种方法。