我有一个Widget类和一个派生自它的CompositeWidgetCompositeWidget添加子级管理行为。 Widget构造函数采用CompositeWidget*参数作为小部件父级。我需要使用此父指针来访问CompositeWidget中的某些功能。例如:

Widget::Widget(CompositeWidget* parent)
{
    parent_->AddChild(*this);
}

这迫使我创建一个公共(public)方法CompositeWidget::AddChild。是否可以将这个接口(interface)保留给类层次结构专用(有点像对protected的反向访问-限于基类)?我是否正在考虑这样的问题?

编辑:我正在尝试避免友谊(如果在这种情况下可能的话)。

最佳答案

使用friend关键字。

class Widget { ... };

class CompositeWidget {
  friend class Widget;
};

但是,您也可以在virtual类上插入AddChild方法Widget

10-06 08:30