gpt4 book ai didi

c++ - 如何: derived member in derived class with derived class specific methods

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:18 26 4
gpt4 key购买 nike

我在 Ubuntu 11.10 和最新版本的 NetBeans 下使用 C++。假设我有以下代码:

class Node {}
class DerivedNode : public Node {}

class Graph {
vector<Node*> nodes;
}

class DerivedGraph : public Graph { }

目前我将 DerivedNodes 存储在 DerivedGraph 类中,例如:

nodes.push_back(new DerivedNode());

当我需要使用仅适用于 DerivedNodes 和 DerivedGraphs 的特定方法时我被迫首先在我的节点指针上使用 dynamic_cast。

我希望能够在 DerivedGraph 中使用仅适用于 DerivedNodes 的特定方法并避免类型转换指针的需要。如果结束,我不介意重新设计我的类(class)结果比我的好。

我确信必须有一种干净简单的方法来实现我正在尝试做的同样的事情。也许有专门的模板?对此事的任何想法都会大大赞赏。如果我还没有去过,我还会提供所需的任何其他信息清楚。

编辑:我没有两份。我想强调它的外观。我为演讲道歉。我要获取的是:

class DerivedGraph: public Graph {
vector<DerivedNode*> nodes;
}

最佳答案

确定您在 Node 中的界面是合适的吗?有时,当您发现自己需要向下转型时(尤其是在这种情况下,基指针存储在容器中),这可能表明您的抽象接口(interface)没有正确满足您的所有需求。通常像模板方法模式这样的东西可以解决您的所有需求,而根本不需要沮丧。

但是,假设您的继承模型确实需要以这种方式工作,您可能想要做的是在 DerivedGraph 中覆盖虚拟方法以添加和获取节点。在这种情况下,您必须验证节点类型并将其向下转型。

最后一种方法是有两个单独的容器,一个在包含所有不是 DerivedNode 的节点的父容器中,另一个在 DerivedGraph 中的容器包含所有派生节点。然后,您再次使用重写函数来根据您的 API 需求确定要访问的容器。

关于c++ - 如何: derived member in derived class with derived class specific methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com