// cadena.h - Declaración de la clase CCadena
#if !defined(_CADENA_H_)
#define _CADENA_H_

#include <iostream>

/////////////////////////////////////////////////////////////////
// Clase para operar con cadenas de caracteres
class CCadena
{
    
  private:
    char   *pmCad;   // puntero a la cadena de caracteres
    size_t nlong;    // longitud de la cadena

  protected:
    static void error(char *);    

  public:
    CCadena(const char * = 0);          // constructor
    CCadena(const CCadena&);            // constructor copia
    CCadena(char, int);                 // constructor
    ~CCadena();                         // destructor

    // Concatenar cadenas de caracteres
    friend CCadena operator+(const CCadena&, const CCadena&);
      
    // Comparación de cadenas
    friend bool operator==(const CCadena&, const CCadena&);
    friend bool operator!=(const CCadena&, const CCadena&);
    friend bool operator< (const CCadena&, const CCadena&);
    friend bool operator> (const CCadena&, const CCadena&);
    
    // Operaciones de entrada/salida                                 
    friend std::istream& operator>>(std::istream&, CCadena&);
    friend std::ostream& operator<<(std::ostream&, const CCadena&);
    
    // Asignación, concatenación e indexación
    CCadena& operator=(const CCadena&); // asignación objeto
    CCadena& operator=(const char *);   // asignación cadena
    CCadena operator+=(const CCadena&); // suma mas asignación
    char& operator[](unsigned int);     // indexación
    size_t ObtenerLong() const { return nlong; }
};

#endif // _CADENA_H_
/////////////////////////////////////////////////////////////////
