指向子 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;}
这是我正在使用的代码:
#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;}