C++だとこうなる。
この辺の仕様を忘れてて思い出すのに数時間かかった。
頭の中にメモリ空間をイメージしてコンピュータと会話しよう。
#include <iostream> using namespace std; class BaseClass { public: virtual void print() { cout << "Base" << endl; } }; class DerivedClass : public BaseClass { public: void print() override { cout << "Derived" << endl; } }; int main(){ BaseClass().print(); // outputs "Base" DerivedClass().print(); // outputs "Derived" DerivedClass a = DerivedClass(); a.print(); // outputs "Derived" BaseClass b = DerivedClass(); b.print(); // outputs "Base" BaseClass* c; BaseClass d = DerivedClass(); c = &d; c->print(); // outputs "Base" BaseClass* e; DerivedClass f = DerivedClass(); e = &f; e->print(); // outputs "Derived" BaseClass* g; g = new DerivedClass(); g->print(); // outputs "Derived" delete g; // OK delete e; // Core dumps return 0; }