指向子类方法的指针

时间:2016-11-29 15:47:54

标签: class pointers methods member

所以这是我正在使用的代码:

#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类声明成员指针,但只能使用通用Node类。但是每个节点都有一个我想要的方法。

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

所以我的两种方法都行不通。既没有指向类的指针,也没有指向类成员函数的指针。

1 个答案:

答案 0 :(得分:1)

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

在您的问题中,您只需要定义

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