【发布时间】:2019-07-07 20:30:13
【问题描述】:
我有一个在 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 中声明它们。为什么它不起作用以及如何解决它?谢谢。
【问题讨论】:
-
一般来说,我希望接口的成员函数是公开的。为什么这些受到保护?
-
@PeteBecker,我想确保某些接口方法仅在某些类中调用,而在其他类中不调用。所以朋友会员资格只授予那些特定的类。
标签: c++ inheritance polymorphism protected friend-class