Попробуйте в копировальном конструкторе дедушки явно скопировать все его переменные с обьекта который вы копируете.
Ну что-то наподобии:
X++:
Ded_value_X=Object2Copy.Get_Ded_value_X()
Правда если таких переменных будет много, то будет очень геморно для каждой переменной на наследнике делать метод, который бы её возвращал.
UPD
С другой стороны в таком случае удобно сделать на дедушке конструктор, который в параметрах принимал бы контейнер, содержащий переменные внука и из этого контейнера инитил бы свои.