так были разработаны списки инициализации; класс, который объявляет член, отвечает за инициализацию в этом случае.
как правило, это преодолевается тем, что Food указывает возраст в качестве аргумента в конструкторе:
Food::Food(const int& inAge) : age(inAge) {}
Veg::Veg() : Food(-1) {}
хотя, вы все равно можете получить доступ к возрасту в теле мертвеца, если защищены:
Veg::Veg() : Food() {this->age = -1;}
если бы это было не так, то вы бы построили age дважды, что часто имеет значение, когда тип age является чем-то более сложным, чем int.