Práctica III Objetivos Generales. • Tipos de Datos Abstractos. Funciones Virtuales. Clases paramétricas (templates), Implantación del TDA cadena. • Implantación del TDA pila paramétrica. • • • Objetivos Especificos. • Implantar sendas clases a partir de los tipo de dato abstracto cadena y pila. • La clase pila debe ser implantada como clase paramétrica. Desarrollo de la Práctica. • Un tipo de datos abstracto implantado en C++ consiste básicamente de una interfaz con funciones virtuales puras. Esto indica que en las siguientes clases, el tipo de dato abstracto debe ser refinado. 1) Implantación de la Clase Cadena. class CadenaBase { protected: char * strCnt; int size; public: CadenaBase(char * _str, int _sz) { strCnt = new char[_sz]; for (int i=0; i<_sz; i++) strCnt[i] = _str[i]; } // Estas serán las funciones a implantar: virtual CadenaBase& subcadena(int inicio, int cuenta) = 0; virtual void operator += (CadenaBase &) = 0; ~CadenaBase (){ delete [] strCnt; } }; 2) Implantación de la Clase Pila paramétrica. Una clase paramétrica es una clase en donde al menos uno de los tipos de datos llega a estar definidos solo en tiempo de compilación. Por ello, las clases paramétricas no son parte de las bibliotecas de funciones. Estas clases están definidas en los archivos cabecera y serán incluidos cada vez que vayan a ser utilizados. La interfaz de la clase paramétrica pila será: template <class TipoElemento> class PilaBase { T * ptrCnt; int size; public: PilaBase(int size) { ptrCnt = new T[size]; } virtual void push (T &) = 0; virtual T pop() = 0; ~PilaBase() { delete [] ptrCnt; } };