Java/JVMプログラマに見てほしいC++

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;
}