指向子 class 方法的指针

Pointer to a child class method

这是我正在使用的代码:

#include <iostream>

class Node
{
public:
    void speak(){std::cout << "I'm a base node" << std::endl;}
};

class Child : public Node
{
public:
    void speak(){std::cout << "I'm a child node" << std::endl;}
};

int main()
{
    Node node;
    Child child;

    node.speak();
    child.speak();

    std::cout << "= Pointers..." << std::endl;
    Node* pnode = &node;
    Node* pchild = &child;

    pnode->speak();
    pchild->speak();
}

这是输出:

I'm a base node
I'm a child node
= Pointers...
I'm a base node
I'm a base node

pchild->speak(); 调用 Node 的方法而不是 Child 的方法。

现在我的问题是我可能有许多不同类型的节点,连接数也不同。因此,我不能用 ChildX class 声明成员指针,而只能用通用 Node class 声明成员指针。但是每个节点都会有一个我想调用的特定方法。

我试图有一个指向该方法本身的指针而不是 class(因为它总是 int (*foo)() 类型),但编译器抱怨 invalid use of non-static member function .

所以我的两种方法都行不通。既不是指向 class 的指针,也不是指向 classes 成员函数的指针。

熟悉 virtual functions and polymorphism - c++ 中的两个关键概念。

在你的问题中你只需要定义

virtual void speak(){std::cout << "I'm a base/child node" << std::endl;}