From 91ae14ba4499be590813ab84a75f5c027ac12c11 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Fri, 26 Sep 2003 23:20:05 +0000 Subject: [PATCH] Se agregan mas clases del TP. --- ascii.cpp | 47 ++++++++++++++++++++++ ascii.h | 43 +++++--------------- unicode.cpp | 85 +++++++++++++++++++++++++++++++++++++++ unicode.h | 64 ++++++++++++++++++++++++++++++ universalstring.cpp | 96 +++++++++++++++++++++++++++++++++++++++++++++ universalstring.h | 65 ++++++++++++++++++++++++++++++ 6 files changed, 366 insertions(+), 34 deletions(-) create mode 100644 unicode.cpp create mode 100644 unicode.h create mode 100644 universalstring.cpp create mode 100644 universalstring.h diff --git a/ascii.cpp b/ascii.cpp index f2dee21..f4b72d8 100644 --- a/ascii.cpp +++ b/ascii.cpp @@ -20,6 +20,53 @@ # include #endif +Ascii::Ascii(char c = '0'): caracter(c) { +#ifdef DEBUG + std::cerr << "En constructor de Ascii." << std::endl; +#endif +} + +Ascii::Ascii(const Ascii& ascii): caracter(ascii.caracter) { +#ifdef DEBUG + std::cerr << "En constructor de copia de Ascii." << std::endl; +#endif +} + +Ascii::~Ascii(void) { +#ifdef DEBUG + std::cerr << "En destructor de Ascii." << std::endl; +#endif +} + +Ascii& Ascii::operator=(const Ascii& ascii) { +#ifdef DEBUG + std::cerr << "En operator= de Ascii." << std::endl; +#endif + caracter = ascii.caracter; + return *this; +} + +bool Ascii::operator<(const Ascii& ascii) { +#ifdef DEBUG + std::cerr << "En operator< de Ascii." << std::endl; +#endif + return caracter < ascii.caracter; +} + +bool Ascii::operator==(const Ascii& ascii) { +#ifdef DEBUG + std::cerr << "En operator== de Ascii." << std::endl; +#endif + return caracter == ascii.caracter; +} + +short Ascii::operator short(void) { +#ifdef DEBUG + std::cerr << "En cast de Ascii a short." << std::endl; +#endif + return static_cast(caracter); +} + /// Volcado a un stream de salida. std::ostream& operator<<(std::ostream& out, const Ascii& ascii) { #ifdef DEBUG diff --git a/ascii.h b/ascii.h index 78201b5..cbf9f94 100644 --- a/ascii.h +++ b/ascii.h @@ -33,50 +33,25 @@ class Ascii { public: /// Constructor. - Ascii(char c = '0'): caracter(c) { -#ifdef DEBUG - std::cerr << "En constructor de Ascii." << std::endl; -#endif - } + Ascii(char c = '0'); /// Constructor de copia. - Ascii(const Ascii& ascii): caracter(ascii.caracter) { -#ifdef DEBUG - std::cerr << "En constructor de copia de Ascii." << std::endl; -#endif - } + Ascii(const Ascii& ascii); /// Destructor. - virtual ~Ascii(void) { -#ifdef DEBUG - std::cerr << "En destructor de Ascii." << std::endl; -#endif - } + virtual ~Ascii(void); /// Asignación de una instancia a otra. - Ascii& operator=(const Ascii& ascii) { -#ifdef DEBUG - std::cerr << "En operator= de Ascii." << std::endl; -#endif - caracter = ascii.caracter; - return *this; - } + Ascii& operator=(const Ascii& ascii); /// Comparación por menor de dos instancias. - bool operator<(const Ascii& ascii) { -#ifdef DEBUG - std::cerr << "En operator< de Ascii." << std::endl; -#endif - return caracter < ascii.caracter; - } + bool operator<(const Ascii& ascii); /// Comparación por igual de dos instancias. - bool operator==(const Ascii& ascii) { -#ifdef DEBUG - std::cerr << "En operator== de Ascii." << std::endl; -#endif - return caracter == ascii.caracter; - } + bool operator==(const Ascii& ascii); + + /// Cast a short. + short int Ascii::operator short int(void); /// Volcado a un stream de salida. friend std::ostream& operator<<(std::ostream& out, const Ascii& ascii); diff --git a/unicode.cpp b/unicode.cpp new file mode 100644 index 0000000..f1a0ad7 --- /dev/null +++ b/unicode.cpp @@ -0,0 +1,85 @@ +/* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80: + * + * Taller de Programación (75.42). + * + * Ejercicio Número 4: + * Ordena texto ASCII o Unicode. + * + * Copyleft 2003 - Leandro Lucarella + * Puede copiar, modificar y distribuir este programa bajo los términos de + * la licencia GPL (http://www.gnu.org/). + * + * Creado: Mon Sep 22 21:00:07 ART 2003 + * + * $Id$ + */ + +#include "unicode.h" + +#ifdef DEBUG +# include +#endif + +Unicode::Unicode(short c = 0): caracter(c) { +#ifdef DEBUG + std::cerr << "En constructor de Unicode." << std::endl; +#endif +} + +Unicode::Unicode(const Unicode& unicode): caracter(unicode.caracter) { +#ifdef DEBUG + std::cerr << "En constructor de copia de Unicode." << std::endl; +#endif +} + +Unicode::~Unicode(void) { +#ifdef DEBUG + std::cerr << "En destructor de Unicode." << std::endl; +#endif +} + +Unicode& Unicode::operator=(const Unicode& unicode) { +#ifdef DEBUG + std::cerr << "En operator= de Unicode." << std::endl; +#endif + caracter = unicode.caracter; + return *this; +} + +bool Unicode::operator<(const Unicode& unicode) { +#ifdef DEBUG + std::cerr << "En operator< de Unicode." << std::endl; +#endif + return caracter < unicode.caracter; +} + +bool Unicode::operator==(const Unicode& unicode) { +#ifdef DEBUG + std::cerr << "En operator== de Unicode." << std::endl; +#endif + return caracter == unicode.caracter; +} + +char Unicode::operator char(void) { +#ifdef DEBUG + std::cerr << "En cast de Unicode a char." << std::endl; +#endif + return static_cast(caracter); +} + +/// Volcado a un stream de salida. +std::ostream& operator<<(std::ostream& out, const Unicode& unicode) { +#ifdef DEBUG + std::cerr << "En operator<< de Unicode." << std::endl; +#endif + return out << unicode.caracter; +} + +/// Captura desde un stream de entrada. +std::istream& operator>>(std::istream& in, const Unicode& unicode) { +#ifdef DEBUG + std::cerr << "En operator>> de Unicode." << std::endl; +#endif + return in >> unicode.caracter; +} + diff --git a/unicode.h b/unicode.h new file mode 100644 index 0000000..1eeb1d8 --- /dev/null +++ b/unicode.h @@ -0,0 +1,64 @@ +/* vim: set et sts=4 sw=4 fdm=marker fmr={,} fdn=1 fo+=t tw=80: + * + * Taller de Programación (75.42). + * + * Ejercicio Número 4: + * Ordena texto ASCII o Unicode. + * + * Copyleft 2003 - Leandro Lucarella + * Puede copiar, modificar y distribuir este programa bajo los términos de + * la licencia GPL (http://www.gnu.org/). + * + * Creado: Mon Sep 22 21:00:15 ART 2003 + * + * $Id$ + */ + +#ifndef UNICODE_H +#define UNICODE_H + +#include +#include + +#ifdef DEBUG +# include +#endif + +/// Caracter Unicode. +class Unicode { + + /// Caracter Unicode almacenado. + char caracter; + + public: + + /// Constructor. + Unicode(short c = 0); + + /// Constructor de copia. + Unicode(const Unicode& unicode); + + /// Destructor. + virtual ~Unicode(void); + + /// Asignación de una instancia a otra. + Unicode& operator=(const Unicode& unicode); + + /// Comparación por menor de dos instancias. + bool operator<(const Unicode& unicode); + + /// Comparación por igual de dos instancias. + bool operator==(const Unicode& unicode); + + /// Cast a char. + char Unicode::operator char(void); + + /// Volcado a un stream de salida. + friend std::ostream& operator<<(std::ostream& out, const Unicode& unicode); + + /// Captura desde un stream de entrada. + friend std::istream& operator>>(std::istream& in, const Unicode& unicode); + +}; + +#endif // UNICODE_H diff --git a/universalstring.cpp b/universalstring.cpp new file mode 100644 index 0000000..68d09f5 --- /dev/null +++ b/universalstring.cpp @@ -0,0 +1,96 @@ +/* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80: + * + * Taller de Programación (75.42). + * + * Ejercicio Número 4: + * Ordena texto ASCII o Unicode. + * + * Copyleft 2003 - Leandro Lucarella + * Puede copiar, modificar y distribuir este programa bajo los términos de + * la licencia GPL (http://www.gnu.org/). + * + * Creado: Mon Sep 22 21:00:07 ART 2003 + * + * $Id$ + */ + +#include "universalstring.h" +#include + +#ifdef DEBUG +# include +#endif + +UniversalString::UniversalString(void): string(NULL) { +#ifdef DEBUG + std::cerr << "En constructor de UniversalString." << std::endl; +#endif +} + +UniversalString::UniversalString(const UniversalString& str): string(NULL) { +#ifdef DEBUG + std::cerr << "En constructor de copia de UniversalString." << std::endl; +#endif + // Llamo al operador igual. + *this = str; +} + +UniversalString::~UniversalString(void) { +#ifdef DEBUG + std::cerr << "En destructor de UniversalString." << std::endl; +#endif +} + +UniversalString& UniversalString::operator=(const UniversalString& str) { +#ifdef DEBUG + std::cerr << "En operator= de UniversalString." << std::endl; +#endif + // Si tengo memoria reservada, la libero. + if (string) { + delete string; + string = NULL; + } + // Si el string a copiar no es nulo, aloco memoria y copio. + if (str.string) { // TODO creo que necesito len y max. + string = new T[strlen(str.string) + 1]; + } + return *this; +} + +bool UniversalString::operator<(const UniversalString& str) { +#ifdef DEBUG + std::cerr << "En operator< de UniversalString." << std::endl; +#endif + return caracter < str.caracter; +} + +bool UniversalString::operator==(const UniversalString& str) { +#ifdef DEBUG + std::cerr << "En operator== de UniversalString." << std::endl; +#endif + return caracter == str.caracter; +} + +short UniversalString::operator short(void) { +#ifdef DEBUG + std::cerr << "En cast de UniversalString a short." << std::endl; +#endif + return static_cast(caracter); +} + +/// Volcado a un stream de salida. +std::ostream& operator<<(std::ostream& out, const UniversalString& str) { +#ifdef DEBUG + std::cerr << "En operator<< de UniversalString." << std::endl; +#endif + return out << str.caracter; +} + +/// Captura desde un stream de entrada. +std::istream& operator>>(std::istream& in, const UniversalString& str) { +#ifdef DEBUG + std::cerr << "En operator>> de UniversalString." << std::endl; +#endif + return in >> str.caracter; +} + diff --git a/universalstring.h b/universalstring.h new file mode 100644 index 0000000..21116a9 --- /dev/null +++ b/universalstring.h @@ -0,0 +1,65 @@ +/* vim: set et sts=4 sw=4 fdm=marker fmr={,} fdn=1 fo+=t tw=80: + * + * Taller de Programación (75.42). + * + * Ejercicio Número 4: + * Ordena texto ASCII o Unicode. + * + * Copyleft 2003 - Leandro Lucarella + * Puede copiar, modificar y distribuir este programa bajo los términos de + * la licencia GPL (http://www.gnu.org/). + * + * Creado: Mon Sep 22 21:00:15 ART 2003 + * + * $Id$ + */ + +#ifndef UNIVERSALSTRING_H +#define UNIVERSALSTRING_H + +#include +#include + +#ifdef DEBUG +# include +#endif + +/// String Universal. +template +class UniversalString { + + /// Cadena de caracteres. + T* string; + + public: + + /// Constructor. + UniversalString(char c = '0'); + + /// Constructor de copia. + UniversalString(const UniversalString& str); + + /// Destructor. + virtual ~UniversalString(void); + + /// Asignación de una instancia a otra. + UniversalString& operator=(const UniversalString& str); + + /// Comparación por menor de dos instancias. + bool operator<(const UniversalString& str); + + /// Comparación por igual de dos instancias. + bool operator==(const UniversalString& str); + + /// Cast a short. + short int UniversalString::operator short int(void); + + /// Volcado a un stream de salida. + friend std::ostream& operator<<(std::ostream& out, const UniversalString& str); + + /// Captura desde un stream de entrada. + friend std::istream& operator>>(std::istream& in, const UniversalString& str); + +}; + +#endif // UNIVERSALSTRING_H -- 2.43.0