У меня есть производный класс, который реализует интерфейс (абстрактный класс) в C ++.Этот интерфейс имеет несколько защищенных функций, реализация которых определена в производном классе.
Теперь я пытаюсь получить доступ к этим защищенным функциям в производном классе из внешнего класса, объявив внешний класс как друга в производном.учебный класс.Тем не менее, компилятор по-прежнему жалуется, что я не могу получить доступ к защищенным функциям-членам.
Например: у меня есть класс ConnectSession
, реализующий IConnectSession
.И внешний класс с именем SystemProcess
, который хочет получить доступ к защищенной функции-члену HandlePriviledgedRequest
.
В IConnectSession.h
class IConnectSession{
protected:
virtual void HandlePriviledgedRequest() = 0;
}
В ConnectSession.h
class ConnectSession : public IConnectSession{
protected:
void HandlePriviledgedRequest() override {/* func definition */}
friend class SystemProcess;
}
В классе друга я пытаюсь получить доступ HandlePriviledgedRequest()
SystemProcess.cpp
SystemProcess::ApplyConfiguration(){
std::shared_ptr<IConnectSession> sessionPtr = new ConnectSession();
sessionPtr->HandlePriviledgedRequest(); // compile error
}
Выдает ошибку компилятора, говорящую, что я не могу получить доступ к защищенным членам, даже если я уже объявил SystemProcess
как друг.Поскольку объявления друзей не наследуются, я особенно объявляю их в ConnectSession
.Почему не работает и как это исправить?Спасибо.