martes, 11 de septiembre de 2012

Libreria Cadena.h

MCadena.htm

#ifndef CADENA
#define CADENA
#include <string> 
#include <iostream>
using namespace std;

class Cadena {
      public: // constructor con valor
      Cadena(char *cad) {
                  cadena = new char[strlen(cad)+1];//para el temaño exacto
                  strcpy(cadena, cad);
                  }
      // constructor por defecto
      Cadena() : cadena(NULL) {}
      
      Cadena(int numCar){ 
                 cadena= new char[numCar];
                 strcpy(cadena,"");
                 }

Cadena(const Cadena &c) : cadena(NULL) {
             *this = c; // copia toda el objeto
             }
             
~Cadena() { 
          if(cadena) 
          delete[] cadena; 
          }

//Sobrecarga de operadores          

Cadena &operator=(const Cadena &c); // asignacion
Cadena &operator=(char *cad){
                  strcpy(cadena, cad);
                  return *this;
                  }

bool operator==(const Cadena &c) const{ // igualdad de cadena
            return !strcmp(cadena, c.cadena); //strcpm() retorna 0 si son iguales
       }

bool operator!=(const Cadena &c) const{ // desigualdad de cadena
            return strcmp(cadena, c.cadena);
       }
bool operator<(const Cadena &c) const {  // menor 
            return (strcmp(cadena, c.cadena) < 0) ; // si es menor retornará un nºnegativo
   }

bool operator>(const Cadena &c) const {  // mayor
            return (strcmp(cadena, c.cadena) > 0) ;
   }
   
bool operator<=(const Cadena &c) const {
            return (strcmp(cadena, c.cadena) <= 0) ;
   }

bool operator>=(const Cadena &c) const {
            return (strcmp(cadena, c.cadena) >= 0) ;
   }

Cadena operator+(char *cad ){
        strcat(cadena,cad);
        return *this;
       }


Cadena operator+( Cadena &c){
        strcat(cadena,c.cadena);
        return *this;
       }
       
const char* Lee() const {
      return cadena;
      }


private:
        
char *cadena;// puntero de tipo char para el almacenamiento de cadena


};

Cadena &Cadena::operator=(const Cadena &c){ /* sobrecarga del operador = para objetos
                                            de tipo cadena para su igualaion*/
if(this != &c) { // no es el mismo objeto
if(cadena) delete[] cadena; // se libera primera la memoria para luego asignarle otra

if(c.cadena) {
cadena = new char[strlen(c.cadena)+1]; /* se le asigna memoria de nuevo a cadena 
                                          del obj this con la memoria del objeto 
                                              nuevo*/
strcpy(cadena, c.cadena);
}
else cadena = NULL; // no es necesario la igualacion es el mismo objeto
}
return *this;
}


ostream& operator<<(ostream &os, const Cadena &cad) /* para mostrar directamente 
                                                        al objeto ejemplo
                                                        cout << cadena */
{
os << cad.Lee() ;
return os;
}
#endif



/* copyleft
     José Romero
     email: -------joseromerogc@gmail.com

*/


No hay comentarios:

Publicar un comentario