类成员和继承

时间:2012-07-03 17:00:45

标签: c++ inheritance member

我迷路了。我有一个班级Editor和一个班级Controller。类WorkflowEditorWorkflowController分别来自EditorController。班级Controller有受保护的成员Editor editor,班级WorkflowController有私人成员WorkflowEditor editor(同名)。


从EitanT编辑
这是一个简化的代码,用于说明OP所描述的内容:

class Controller
{
    Editor editor;
    // ...
}

class WorkflowEditor : public Editor {
    // ...
};

class WorkflowController : public Controller {
    WorkflowEditor editor;
    // ...
};

我的应用程序是一个带图形界面的模块。在工作流程模式下,启动时会出现一个功能区,并显示一个向导。单击一个按钮,将调用类Controller中的方法。执行崩溃,因为此时,类型为Editor editor的对象的Controller类成员已经死亡。我希望班级成员Editor editor与班级成员WorkflowEditor editor(同名)相同。

换句话说,如果一个班级A有一个班级B,而班级childA(派生自A)的班级成员childB }(派生自B),类型childBB的成员具有相同的名称,是不是“继承”的成员?

2 个答案:

答案 0 :(得分:2)

该对象是继承的,但不是与派生类中声明的对象相同的对象。派生类成员是基类成员的单独对象,即使它们具有相同的名称。从技术上讲,它隐藏基类成员,只能使用其限定名称Controller::editor进行访问。

您可以使用虚拟函数实现所需,您可以在派生类中覆盖该函数以访问其中包含的对象:

class Controller {
public:
    // No data members, just an abstract interface

    // Access a data member of the derived class
    virtual Editor & editor() = 0;
    virtual ~Controller() {}
};

class WorkflowController : public Controller {
public:
    WorkflowEditor & editor() {return editor_;}

private:
    // The object itself - accessible as its true type here, or
    // as its abstract type via the abstract interface.
    WorkflowEditor editor_;
};

答案 1 :(得分:1)

派生类中的成员隐藏基类中的成员。