所以这是我正在使用的代码:
#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
。
所以我的两种方法都行不通。既没有指向类的指针,也没有指向类成员函数的指针。
答案 0 :(得分:1)
熟悉virtual functions and polymorphism - c ++中的两个关键概念。
在您的问题中,您只需要定义
virtual void speak(){std::cout << "I'm a base/child node" << std::endl;}