От того что вы в Item* кладете Fish* либо Boot* он не меняется и все равно остается Item*.
Короче такой способ работать не будет.
Item ловит все три класса, а Boot и Fish только сами себя.
Можно ловить непосредственно сам указатель или ссылку, тогда информация о наследовании терятся не будет, но как я написал выше, нужен другой способ узнать какой именно класс находится в указателе(ссылке) на базовый. Например добавить какую-то виртуальную функцию с разным поведением. А если сделать Item -> Fish -> Boot (бутса наследуется от рыбы, а рыба от итем) тогда можно различить при помощи dynamic_cast. Если не кастится - значит это итем, если один раз кастится - значит рыба, если два раза - значит бутса.