os << (Base) X ; // после долгих экспериментов получил работающую программу. Эта конструкция правильна?
os << (const Base&) X;