Предположим, у меня есть класс сокета:
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)
, а серверный сокет имел доступ только к Send(string, int)
.
Я проверил другой ответ:
И это хорошая идея вообще не использовать наследование, а просто инкапсулировать (иметь экземпляр сокета на сервере). Но я хочу знать, можно ли это сделать с помощью Inheritance.
ClientSocket
будет иметь доступ только к... звучит как свойство времени компиляции, но вызовы виртуальных функций отправляются во время выполнения. - person Evg   schedule 26.05.2021Send
не должны быть частью базового классаSocket
, а вместо этого должны быть унаследованными классами. - person Some programmer dude   schedule 26.05.2021isServer
или иным образом знать, что у вас естьServerSocket
, то вы почти ничего не выиграете от полиморфизма, так что не делайте этого. Без него программа будет работать эффективнее. Полиморфизм лучше всего проявляется, когда вам не нужно знать точный производный тип. Прямо сейчас вы боретесь против принципа замены Лисков, и это принесет боль, которая только начинается. - person user4581301   schedule 26.05.2021