私は C++ を初めて使用し、ポリモーフィズムの概念と関数ポインターについて混乱しています。なんか頭の中が混じってる。
以下に示すコードでは、BaseClass のメソッドを指す関数ポインターを宣言しています。次に、&BaseClass::Print で割り当てました
。最後の 2 行は、私が混乱する部分です。これらの 2 行で同じ結果が得られないのはなぜですか? ポインター myPtr が v-table を指しているためだと思いますが、よくわかりません。また、オーバーライドされた BaseClass::Print() 関数を myPtr に呼び出させたい場合は、どうすればよいでしょうか?
誰か私にこれを明確にしてもらえますか? ありがとう。
#include <iostream>
using namespace std;
class BaseClass{
public:
virtual void Print(){
cout << "Hey!" << endl;
}
};
class DerivedClass : public BaseClass
{
public:
void Print(){
cout << "Derived!" << endl;
}
};
int main()
{
BaseClass *b = new DerivedClass;
void (BaseClass::*myPtr)();
myPtr = &BaseClass::Print;
(b->*myPtr)(); //print "Derived!"
b->BaseClass::Print(); //print "Hey!"
}