次のコードがあります(仮想関数と static_castから盗まれました):
#include <iostream>
class Base
{
public:
virtual void foo() { std::cout << "Base::foo() \n"; }
};
class Derived : public Base
{
public:
virtual void foo() { std::cout << "Derived::foo() \n"; }
};
私が持っている場合:
int main()
{
Base base;
Derived& _1 = static_cast<Derived&>(base);
_1.foo();
}
プリントアウトは次のようになります。Base::foo()
ただし、次の場合:
int main()
{
Base * base;
Derived* _1 = static_cast<Derived*>(base);
_1->foo();
}
プリントアウトは次のようになります。Segmentation fault: 11
正直、どちらもよくわかりません。上記の例に基づいて、 static_cast と virtual メソッドの間の複雑さを誰かが説明できますか? ところで、印刷物を " " にしたい場合はどうすればよいDerived::foo()
ですか?