gpt4 book ai didi

c++ - 找出继承对象的类

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:40 25 4
gpt4 key购买 nike

我有一个 Foo 对象的链表。 Foo 是一个基类,有几个类继承自它。例如,类 A、B 和 C

我循环遍历这个链表并调用一个方法 some_method,它有 3 个定义;每个 child 类(class)一个:

some_method(A a);
some_method(B b);
some_method(C c);

链表是通用的,所以它是 Foo 类型,因为它有各种各样的 A、B 和 C 对象。

当我在 current_element 的链表中循环,调用 some_method(current_element); 时,我怎样才能让它调用正确的方法?编译器一直提示,直到我编写了一个采用通用 Foo 的 some_method,并且它只调用该方法。

最佳答案

根据您的要求,您可能需要考虑使用多态性。为此,将纯虚方法添加到基节点类,并将相应的方法移动到派生类。

class Foo
{
public:
virtual void some_method() = 0;
};

class A : Foo
{
public
virtual void some_method()
{
// move the body of some_method(A a) here
}
};

为此,您的链接列表将需要 Foo*,而不是 Foo

class Node
{
public:
Foo* foo;
Node* next;
};

// ...

Node* someNode = GetNode();
// Calls correct method - A::some_method, B::some_method, or C::some_method
someNode->foo->some_method();

如果您不能将 some_method 放在 Foo/A/B/C 中,那么您可能需要研究访问者设计模式:

http://en.wikipedia.org/wiki/Visitor_pattern

关于c++ - 找出继承对象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894574/

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