Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/09/2008, 18:12
Joaquin_Phi
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Plantilla y Clase

Saludos, podria alguien, porfavor, resolver esta duda.

Sobre la siguiente linea de codigo:

Tabla<Cadena> TablaCad(nElementos);

Entiendo que "TablaCad" es un objeto de clase "Cadena" creado a partir de una Plantilla llamada "Tabla".

El problema surge al intentar comprender el recorrido que hace la linea de codigo anterior hasta la publicaciòn del resultado en pantalla.

Al parecer se inicia con el constructor de "Tabla", entregando el valor de nElementos como dato para el parametro del constructor-Tabla(int nElem)-:
Cita:
template <class T>
class Tabla {
public:
Tabla(int nElem);
~Tabla();
T& operator[](int indice) { return pT[indice]; }
int NElementos() const { return nElementos; }

private:
T *pT;
int nElementos;
};

// Definición:
template <class T>
Tabla<T>::Tabla(int nElem) : nElementos(nElem) {
pT = new T[nElementos];
}

template <class T>
Tabla<T>::~Tabla() {
delete[] pT;
}

Con lo anterior se logra la memoria para los datos que seran guardados en el objeto, y simular un array mediante la sobrecarga del operador "[]".

Pero desde este punto no entiendo, como se utiliza el codigo de la clase "Cadena".

Cita:
class Cadena {
public:
Cadena(char *cad) {
cadena = new char[strlen(cad)+1];
strcpy(cadena, cad);
}
Cadena() : cadena(NULL) {}
Cadena(const Cadena &c) : cadena(NULL) {*this = c;}
~Cadena() { if(cadena) delete[] cadena; }
Cadena &operator=(const Cadena &c) {
if(this != &c) {
if(cadena) delete[] cadena;
if(c.cadena) {
cadena = new char[strlen(c.cadena)+1];
strcpy(cadena, c.cadena);
}
else cadena = NULL;
}
return *this;
}
const char* Lee() const {return cadena;}

private:
char *cadena;
};
1)¿Cual de los tres constructores se utilizara?
2)¿Que argumentos se utilizaran?
3)Y en general, agradeceria, cualquier otra explicaciòn del uso del codigo anterior.

El ejercicio viene de la pagina:
http://www.conclase.net/c/curso/index.php?cap=040b
Es el ultimo.

Gracias por la paciencia y la ayuda.