
Alonso Cangalaya
PreguntaCuando creo al Omnivoro, es normal de que cree 2 animales al mismo tiempo? cuando corro el programa me indica de que existen 5 animales 😕
Animal *a = new Animal(); Hervivoro *e = new Hervivoro(); Carnivoro *c = new Carnivoro(); Omnivoro *o = new Omnivoro(); // genera 2 animales??

Alonso Cangalaya
gracias!! como solución se me ocurrió restar -1 a num_animales en el contructor de la clase omnivoro
class Omnivoro : public Hervivoro , public Carnivoro{ // heredamos carnivoro y hervivoro public: Omnivoro() : Hervivoro(), Carnivoro() { num_animales -=1;} // cuando se inicie el contructor, restamos -1 a num_animales para evitar ambiguedad void comer(void){ // método propio de la clase carnivoro cout << "Los omnivoros pueden comer lo que sea" << endl; } };
resultado
generando un nuevo animal generando un nuevo animal generando un nuevo animal generando un nuevo animal generando un nuevo animal numero de animales: 4

Diana Martinez
Si, cómo menciono en la clase, al heredar de dos clases base, se comporta como una y cómo la otra a la vez, por lo tanto dentro de un omnivoro hay un carnívoro y un hervívoro.
Hay formas de hacer que sea solo un nuevo animal, pero para el ejemplo de clase, lo que te sucede es un comportamiento esperado.