Ваша логика отключена, и ваша программа не будет делать то, что вы ожидаете.Вы добавляете туда указатели.Оператор + вызываться не будет.
Вам нужно что-то вроде
babypigeon = (*pgone) + (*pg);
В этом случае вы добавляете двух животных.Таким образом, ваш оператор + должен быть перегружен в классе Animal.
Решением этой проблемы будет вызов некоторых виртуальных методов из оператора + и наличие там логики.
EDIT:
class Animal{
//....
virtual Animal plusLogic( const Animal& otherAnimal ) const;
Animal operator + ( const Animal& otherAnimal ) const
{
return this->plusLogic(otherAnimal);
}
}
class Pigeon : public Animal{
//.....
virtual Animal plusLogic( const Animal& otheAnimal ) const;
}
Animal Pigeon::plusLogic (const Animal& otherAnimal) const
{
//logic heree
}
Таким образом, вызов оператора + для Animal типа Pigeon вызовет функцию plusLogic в классе Pigeon (поскольку он является виртуальным).