これは私が投稿した他の質問とは異なる質問です。私はこのコードを持っています:
class Base
{
public:
Base()
{
};
virtual void Method()
{
cout << "Base Method";
}
};
class Derived : public Base
{
public:
virtual void Method()
{
cout << "Override Method";
}
};
class Derived2 : public Derived
{
public:
Derived2()
{
cout << "Derived2 constructor";
}
void Method()
{
cout << "Override2 Method";
}
};
int main()
{
Base *myPointer = new Derived();
dynamic_cast<Derived2*>(myPointer)->Derived2::Method();
Sleep(700);
delete myPointer;
return 0;
}
私が書いたら
dynamic_cast<Derived2*>(myPointer)->Method();
失敗があり(dynamic_castはNULLを返し、NULL-> Method()は例外を引き起こします)、これは私が期待していたことですが、
dynamic_cast<Derived2*>(myPointer)->Derived2::Method();
この関数は、Derived2コンストラクターを呼び出さなくても成功します。メソッドは静的関数でもありませんが、ここで何が起こっているのでしょうか。