// Tabla.cpp: ejemplo de Tabla de cadenas
//Mayo 2015 Tutoriales En Linea
#include <iostream>
#include <cstdio>
#include <cstring>
////// INICIO Tabla
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;
}
////// FINAL Tabla
////// INICIO Cadena
using std::strcpy;
using std::strlen;
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;
};
ostream& operator<<(ostream &os, const Cadena& cad) {
os << cad.Lee();
return os;
}
////// FIN Cadena
using namespace std;
const int nElementos = 5;
int main() {
Tabla<Cadena> TablaCad(nElementos);
char cadena[20];
for(int i = 0; i < nElementos; i++) {
sprintf(cadena, "Numero: %2d", i);
TablaCad[i] = cadena;
}
strcpy(cadena, "Modificada");
for(int i = 0; i < nElementos; i++)
cout << "TablaCad[" << i << "] = "
<< TablaCad[i] << endl;
return 0;
}