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

标签 c++

我有一个 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 中,那么您可能需要研究访问者设计模式:

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

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

相关文章:

c++ - 双重否定以检查 not NULL

c++ - Cin 不在等待输入

c++ - 读取/显示实际字节 (C++)

c++ - 在列中显示双端队列 vector

c++ - C++ 中的卡方概率函数

c++ - 为什么对 std::tuple 的 std::vector 进行排序比对 std::arrays 的 vector 排序更快?

c++ - 这是在 C++ 中将一个类对象包含在另一个类中的最佳方式

c++ - 在 visual studio : libboost_regex-vc120-mt-sgd-1_59. lib(instances.obj) 中使用内置的 boost 库时:错误 LNK2038:检测到不匹配

c++ - 重新解释强制转换模板非类型参数 : clang c++14 vs c++1z

c++ - 如何从 std::locale 对象获取一个方面?