Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/04/2016, 11:33
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 6 meses
Puntos: 52
Respuesta: Override en declaración.

No entiendo exactamente tu pregunta.

En C++ tambien puedes hacer overides. Hay 2 formas.
En la sencilla. Tienes una clase base con un método.

Cuando creas una clase hija, sólo vuelves a implementar el método que quieres anular. Al final, si usas la clase base, usas el método de la clase base, si usas la hija, se usa el método de la clase hija.

La segunda es por medio de polimorfismo. Tienes tu clase case, pero el método lo declaras virtual.

Código C++:
Ver original
  1. virtual void mi_metodo();

En la clase hija, lo reimplementas y listo (no es necesario volver le a poner virtual a menos que la clase hija tenga su propia clase hija y quiera implementar el método de forma diferente).

Código C++:
Ver original
  1. class Padre
  2. {
  3.     virtual void mi_metodo()
  4.     {
  5.         std::cout << "Hola padre\n";
  6.     }
  7. };
  8.  
  9. class Hijo : public Padre
  10. {
  11.     void mi_metodo()
  12.     {
  13.         std::cout << "Hola hijo\n";
  14.     }
  15.  
  16. };
  17.  
  18. class Nieto : public Hijo
  19. {
  20.     void mi_metodo()
  21.     {
  22.         std::cout << "Hola nieto\n";
  23.     }
  24.  
  25. };

En ese ejemplo. Un puntero o una referencia tipo Padre puede apuntar a objetos tipo Hijo o Nieto. Si desde ese puntero o referencia mandas llamar a mi_metodo(), tendras comportamientos diferentes

Código C++:
Ver original
  1. Padre *p;
  2. p = new Padre();
  3. p->mi_metodo(); // Imprime Hola Padre
  4.  
  5. p = new Hijo();
  6. p->mi_metodo(); // Imprime Hola Hijo
  7.  
  8. p = new Nieto();
  9. p->mi_metodo(); // Imprime Hola Hijo creo..... jajaja

Si al metodo de Hijo le pusieramos virtual, entonces daría el mensaje correcto.

Finalmente. En C++11 puedes usar overide para decirle al compilador de manera explicita que lo que quieres es anular el método padre, (como en java). Mas que nada sirve por si nos equivocamos al escribir mal el nombre o los parametros del método.

Código C++:
Ver original
  1. class Hijo : public Padre
  2. {
  3.     void mi_metodo() override
  4.     {
  5.         std::cout << "Hola hijo\n";
  6.     }
  7. };