子班继承友谊
Child class inherit friendship
我有一个类状态和另一个朋友类游戏。我的问题是,如果我有一个扩展状态的类 MenuState,那么 MenuState 也是游戏的朋友吗?
编辑:
因此,如果我遇到这样的情况:
class Game
{
private:
StateManager* myStateManager = new StateManager();
}
class State
{
public:
static void create(StateManager* Parent, const std::string name) {};
private:
StateManager* parent;
}
#define DECLARE_STATE_CLASS(T)
static void create(StateManager* Parent, const std::string name)
{
T* myState = new T();
myState->parent = Parent;
Parent->manageState(name, myState);
}
class MenuState : State
{
public:
DECLARE_STATE_CLASS(MenuState)
}
int main()
{
Game app;
MenuState::create(This needs to be the stateManager in app, "MenuState");
app.init("MenuState");
}
如何在不公开状态管理器的情况下完成这项工作?
所以如果情况如下
class Game {
friend class State;
}
class State {
}
class MenuState : public State {
}
那么答案是否定的,因为friend
指令不是隐式继承的。而且我不明白为什么它应该被继承,Game
明确允许State
访问其内部实现细节,但为什么要将其扩展到可以做不同事情的State
子类?
您可以向游戏添加访问功能。即使 MenuState 是 Game 的朋友,这仍然不起作用,因为您正在尝试传递 Game 的私有成员,而不是在函数中访问它。
例如,如果您无权修改游戏,那么选择是在 State 中添加一个访问函数,然后您可以从 MenuState 使用该访问函数。
class State
{
public:
static void create(StateManager* Parent, const std::string name) {};
StateManager* getManager(Game* g){
return g->myStateManager;
}
private:
StateManager* parent;
}
#define DECLARE_STATE_CLASS(T)
static void create(Game* g, const std::string name)
{
T* myState = new T();
myState->parent = State::getManager(g);
Parent->manageState(name, myState);
}
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 继承的友谊
- 友谊被继承??奇怪
- 子班继承友谊
- 友谊和私有嵌套类继承
- 继承和友谊访问.C++
- 友谊和继承有什么区别?
- c++如何优雅地处理不被继承的友谊
- 是否可以将友谊与继承结合起来访问私有数据成员?
- 友谊与继承
- 基于继承关系的模板友谊