Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


Funciones-miembro (métodos) genéricos en clases genéricas

Ejemplo

Definición de un método genérico en una clase genérica.  La definición se realiza off-line (en el exterior del cuerpo de la clase).


#include <iostream>
using namespace std;

template<class X> class A {  // clase genérica
  public:
  int x;
  X* xptr;
  template<class T> void fun(T t1, T t2); // método genérico
  A (X* b, int i = 0);       // constructor
    x = i;
    xptr = b;
  }
};

template<class X>        // definición off-line 
  template<class T> void A<X>::fun(T t1, T t2) {
      cout << "Valor-1: " << t1 
           << ", Valor-2: " << t2
           << ", Miembro-x: " << x
           << ", Objeto: " << *xptr << endl;
  }

template<class X>        // constructor off-line
  A<X>::A(X* b, int i) {
    x = i;
    xptr = b;
  }

int main(void) {         // ==============
  char c = 'c'; char* cptr = &c;
  int x = 13;   int* iptr = &x;
  A<int> a(iptr, 2);     // instanciar un objeto
  A<char> b(cptr, 3);    // ídem.
  a.fun(2, 3);           // invocar método de instancia
  b.fun('x', 'y');       // ídem.
  return 0;
}

Salida:

Valor-1: 2, Valor-2: 3, Miembro-x: 2, Objeto: 13
Valor-1: x, Valor-2: y, Miembro-x: 3, Objeto: c

Comentario:

El programa es exactamente igual que un ejemplo anterior ( Ejemplo-1). La única diferencia estriba en que aquí la definición del método genérico fun se ha realizado "off-line", fuera del cuerpo de la clase genérica A.

La única particularidad interesante es la necesidad de incluir el especificador template<class X> para que el compilador conozca el significado del especificador  A<X>.