假设我有一个基类B,派生类D,派生派生类DD。 如何获取当前对象的直接父实例?
e.g。
DD dd;
if (condition )
dd->myfunction();
else
d = getcurrentparent(); // this should give the current parent, here D d;
编辑:
好的我正在添加我的方案。
它就像一个菜单。每个菜单都是不同的类。
主菜单 - 基类 子菜单 - 派生类 子子菜单 - 派生的派生类。
现在当我在子子菜单中遍历时,我需要知道当前obj的直接父节点(比如从子子菜单返回到子菜单)
答案 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是这样的,
假设您的场景是控制台上非常简单的菜单,我会这样做,
Leaf
==> MenuItem
类Composite
==> Menu
类+operation()
==>这两个类的Select()
函数。此功能应该是虚拟的,并且在Menu
类和MenuItem
类中分别覆盖到显示/展开和选择项。Menu
类将具有GoBack()
到父菜单答案 2 :(得分:1)
不是个好主意。你可以做上面提到的,但这不是一个好的设计选择。此外,在多重继承(或多个接口)的情况下,您想要什么父级?