如何查找派生类的直接父级

时间:2012-11-01 10:38:35

标签: c++

假设我有一个基类B,派生类D,派生派生类DD。 如何获取当前对象的直接父实例?

e.g。

DD dd;
if (condition )
  dd->myfunction();
else
  d = getcurrentparent(); // this should give the current parent, here D d;

编辑:

好的我正在添加我的方案。

它就像一个菜单。每个菜单都是不同的类。

主菜单 - 基类 子菜单 - 派生类 子子菜单 - 派生的派生类。

现在当我在子子菜单中遍历时,我需要知道当前obj的直接父节点(比如从子子菜单返回到子菜单)

3 个答案:

答案 0 :(得分:2)

如果你有DD dd;,你可以通过分配一个引用来获得对它的任何基类的引用:

DD dd;
D& d = dd;

我不确定你为什么要这样做,因为派生对象可以做基础对象可以做的所有事情(以及更多)。

答案 1 :(得分:1)

尝试这样的事情,

class D : public B
{
   virtual const char * GetParent()
   {
       return "B";
   }

    // other stuff....
}

class DD : public D
{
   virtual const char * GetParent()
   {
       return "D";
   }

   // other stuff....
}

我希望这就是你想要的。你为什么需要这样的东西?你在创建类似于具有层次结构或类似东西的对象注册表吗?

- 编辑 -

D * d = ⅆ 或者如果你真的想要, 创建一个复制功能,将DD对象复制到D对象。 但我猜是你没有正确地提出你的问题。

P.S。对不起,我第一次错误地读了这个问题。

- 编辑 -

好的,你需要的是复合设计模式。它不像UML图所示那么复杂。一旦你实现它,它很容易编码你的其他东西。在谈论设计模式时,我喜欢“傻瓜的设计模式”一书。它很好地解释了设计模式,并且很好地解释了复合设计模式。如果您需要帮助,请发表评论。但首先要尝试自己做。 :) 请享用。 维基百科链接:http://en.wikipedia.org/wiki/Composite_pattern

- EDIT-- 复合DP是这样的, Composite Design Pattern

假设您的场景是控制台上非常简单的菜单,我会这样做,

  • Leaf ==> MenuItem
  • Composite ==> Menu
  • +operation() ==>这两个类的Select()函数。此功能应该是虚拟的,并且在Menu类和MenuItem类中分别覆盖到显示/展开选择项
  • Menu类将具有GoBack()到父菜单
  • 的功能

答案 2 :(得分:1)

不是个好主意。你可以做上面提到的,但这不是一个好的设计选择。此外,在多重继承(或多个接口)的情况下,您想要什么父级?