#include <iostream> 

using namespace std;

class Base
{
public:
    virtual void fun()
    {
        cout << "Base";
    }
};

class Der : public Base
{
    Base* pb;
    Der(Base* b) : pb(b) {}
public:
    static Der Decorate(Base* b){ return Der(b); }
    virtual void fun()
    {
        cout << "Der...";
        pb->fun();
    }
};

int main()
{
    Der::Decorate(&Der::Decorate(&Base())).fun();
    return 0;
}