#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
*/
martes, 11 de septiembre de 2012
Libreria Cadena.h
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario