Причина
C2(const C2 & c2):_i(c2.i){}
не инициализирует _s
значениями, хранящимися в c2
, потому что конструктор по умолчанию (без параметров) базового класса вызывается, если не указано иное, и поэтому _s
также инициализируется конструктором по умолчанию, а не конструктором копирования.
В вашем случае C2::(const C2&)
вызывает C::C()
, а это string::string()
.
Вы должны явно вызвать правильный базовый конструктор:
C2(const C2 & c2) :
C( c2 ),
_i(c2.i)
{
}