我有一个 Foo
对象的链接列表。 Foo 是一个基类,它有几个继承自它的类。比如说,A、B 和 C
类。
我循环遍历这个链表并调用一个方法some_method
,它有3个定义;每个子类一个:
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 中,那么您可能需要研究访问者设计模式:
关于c++ - 找出继承对象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894574/