Recientemente se me dio una tarea en la que tenía que implementar algo similar a lo siguiente:C++ - ¿Uso excesivo de métodos virtuales?
Hay algunos animales con ciertos atributos, tales como:
Dog1: Nombre: Tery, color: blanco, bebida fav : jugo de uva
Dog2: nombre: Chiva, color: negro, bebida favorito: limonada
Bird1: nombre: tweety, canfly: sí, cansing: no
Bird2: nombre: Parry, canfly: no, cansing: sí
¿Cómo harías esto en C++ de manera eficiente usando OOP prr ¿Actices?
hice algo como esto:
class Animal {
Animal(...);
...
public String getName() const;
public void setName(string s);
...
private:
String name;
}
class Bird : public Animal {
Bird(...);
public bool canFly() const;
public void setCanFly(bool b);
...
private:
bool canFly;
bool canSing;
}
class Dog : public Animal {
...
}
El problema de esta aplicación es que no puedo beneficiarse de polymorhism:
Animal* p = new Anima(...);
...
p->canFly();
y tengo que usar de calidad:
((Bird*)p)->canFly();
Al final fui criticado por no usar funciones virtuales en clase base y usar moldes en lugar de OOP.
Pero en mi opinión no tiene sentido usar funciones virtuales aquí porque getName() debe estar en la clase base para evitar múltiples implementaciones del mismo método. Y canFly no es una propiedad válida para perros, por ejemplo.
Entonces habría que definir algo absurdo como esto uno para el otro (futuro) de los animales que también se hereda de la clase base, lo que crearía una sobrecarga innecesaria:
bool Dog::canFly() const {
return false;
}
Quién es aquí, hice no obtener los principios básicos del polimorfismo?
Si la pregunta se presentó así (sin otras partes), entonces, sí, creo que no hay ningún caso para las funciones virtuales, excepto el destructor. – lijie
Su programa está escrito básicamente en Java, no en C++. ¿Por qué lo preguntas como una pregunta de C++? Algunas de las personas aquí lo han editado para que sea más C++ que Java, pero creo que es un error porque oscurece algo importante acerca de la pregunta. – Omnifarious
El problema con la presentación del polimorfismo es que uno intenta modelar la realidad (animales, automóviles) donde el polimorfismo se vuelve difícil. Cuando se usa en software (estado, estrategia, envío de mensajes), es tan obvio que uno se pregunta cuál podría ser la dificultad. – stefaanv