0
因此,這裏是我的代碼我的工作:指向一個子類方法
#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
。
所以我的兩種方法都不起作用。無論是指向類的指針,還是指向類成員函數的指針。
哦,這解釋了一些事情。我讀過它用於解決菱形多重繼承問題,但這並沒有描繪整個故事。謝謝 – JonnyRobbie
確保您不要將虛擬繼承與虛擬功能混合在一起。鑽石比虛擬功能更進步。 https://en.wikipedia.org/wiki/Virtual_inheritance – kabanus