Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/11/2014, 15:04
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: ¿Llamar a la clase padre?

Para poder llamar a la clase padre, antes tienes que hacer que una clase herede de la otra.

Algo así:

Código C++:
Ver original
  1. class A
  2. {
  3.       int ejemplo() { return 1;}
  4. }
  5.  
  6. class B : public A
  7. {
  8.     int ejemplo(){return 2;}
  9. }

En este caso, para llamar a la clase padre se debe escribir el siguiente código:

Código C++:
Ver original
  1. class A
  2. {
  3.       int ejemplo() { return 1;}
  4. }
  5.  
  6. class B : public A
  7. {
  8.     int ejemplo(){return 2 + A::ejemplo();}
  9. }

Este planteamiento también es válido para operadores:

Código C++:
Ver original
  1. class A
  2. {
  3.       A operator=(const A& original) { ... }
  4. }
  5.  
  6. class B : public A
  7. {
  8.     B operator=( const B& original )
  9.     {
  10.        ...
  11.  
  12.       A::operator=(original);
  13.  
  14.       return *this;
  15.     }
  16. }

Como inciso, comentar que si la función sobreescrita no se declara como "virtual" en la clase padre se pueden producir resultados extraños al tirar de polimorfismo:

Código C++:
Ver original
  1. class A
  2. {
  3.   public:
  4.       int ejemplo() { return 1;}
  5. }
  6.  
  7. class B : public A
  8. {
  9.   public:
  10.     int ejemplo(){return 2;}
  11. }
  12.  
  13. int main( )
  14. {
  15.   A* a1 = new A( );
  16.   B* b = new B( );
  17.   A* a2 = b;
  18.  
  19.   std::cout << a1->ejemplo( ) << b->ejemplo( ) << a2->ejemplo( ) << std::endl;
  20. }

resultado:

Código BASH:
Ver original
  1. 121

Sin embargo, como comentaba, si aplicas el modificador "virtual" la cosa cambia:

Código C++:
Ver original
  1. class A
  2. {
  3.   public:
  4.       virtual int ejemplo() { return 1;}
  5. }
  6.  
  7. class B : public A
  8. {
  9.   public:
  10.     int ejemplo(){return 2;}
  11. }
  12.  
  13. int main( )
  14. {
  15.   A* a1 = new A( );
  16.   B* b = new B( );
  17.   A* a2 = b;
  18.  
  19.   std::cout << a1->ejemplo( ) << b->ejemplo( ) << a2->ejemplo( ) << std::endl;
  20. }

Resultado:

Código BASH:
Ver original
  1. 122

Espero que con esto te haya resuelto la duda :)

Un saludo.