Sei sulla pagina 1di 5

UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN

Programación 4
Curso 2007
TRABAJO OBLIGATORIO

Este primer trabajo obligatorio tiene como objetivo enfrentar problemas clásicos de
implementación de clases en C++ mediante el desarrollo de una clase sencilla: la clase String.

Algunas consideraciones:
- La clase String debe ser implementada como un datatype, o sea: ninguna operación
(salvo los constructores y operadores =, += y >>) debe modificar la instancia implícita
sino que debe devolver una nueva.
- La estructura recomendada para la implementación es arreglos dinámicos. En caso de
querer utilizar otra estructura de datos se debe discutir previamente con el docente de
monitoreo.
- Para las operaciones que involucren índices se debe tener en cuenta que los mismos
deben comenzar en 0.
- La comparación de cadenas de caracteres debe realizarse utilizando las funciones
strcmp y strncmp.
- La entrada/salida se debe realizar utilizando la librería iostream.
- Las únicas funcionalidades provistas por la librería estándar de C++ que se pueden
utilizar en el obligatorio son las mencionadas en los 2 puntos anteriores.
- Para el manejo de errores se deben utilizar excepciones estándares de C++, por más
información ver http://www.cplusplus.com/doc/tutorial/.
- Para todas la operaciones que tengan argumentos de tipo puntero, se debe lanzar la
excepción std::invalid_argument en caso de que en tiempo de ejecución el argumento
valga NULL.
- Se debe respetar completamente la especificación dada a continuación. Esto incluye:
o nombre y modificador de las operaciones.
o orden, tipo y modificador de los parámetros.
o excepciones ante casos de error.

PARTE 1

Implemente la clase String consistente de los constructores, destructor, operaciones y


operadores que se describen a continuación respetando la siguiente especificación:

• Constructores:

// Constructor por defecto. Construye la cadena vacía.


String();

// Constructor por copia.


// String(s) construye una cadena copia de s.
String(const
const String&);

// Constructor común.

1
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN

// String(cc) construye un String a partir la cadena de


// caracteres indicada en cc.
String (const
const char*);
char

• Destructor:

// Libera la memoria utilizada por la instancia.


virtual ~String();

• Operadores:

// operator=(s) Asigna al objeto implícito la cadena s.


String& operator=(const
operator const String&);
String& operator=(const
operator const char*);
char

// operator+(s) Retorna el resultado de la concatenación


// del objeto implícito y s.
String operator+(const
operator const String&) const;
const
String operator+(con
operator const
const char*)
char const;
const

// operator+=(s) Asigna el resultado de la concatenación


// del objeto implícito y s sobre el objeto implícito.
String& operator+=(const
operator const String&);
String& operator+=(const
operator const char*);
char

// operator!() Retorna true sii la cadena es vacía.


bool operator!()const
operator const;
const

// operator==(s) Retorna true sii la cadena del objeto


// implícito es igual a s.
bool operator==(const
operator const String&) const;
const
bool operator==(const
operator const char*)
char const;
const

// operator!=(s) Retorna true sii la cadena del objeto


// implícito es distinta de s.
bool operator!=(const
operator const String&) const;
const
bool operator!=(const
operator const char*)
char const;
const

// operator<(s) Retorna true sii la cadena del

2
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN

// objeto implícito es menor que la cadena s.


bool operator<(const
operator const String&) const;
const
bool operator<(const
operator const char
char*) const;
const

// operator>(s) Retorna true sii la cadena del


// objeto implícito es mayor que la cadena s.
bool operator>(const
operator const String&) const;
const
bool operator>(const
operator const char*)
char const;
const

// operator<=(s) Retorna true sii la cadena del


// objeto implícito es menor o igual que la cadena s.
bool operator<=(const
operator const String&) const;
const
bool operator<=(const
operator const char*)
char const;
const

// operator>=(s) Retorna true sii la cadena del


// objeto implícito es mayor o igual que la cadena s.
bool operator>=(const
operator const String&) const;
const
bool operator>=(const
operator const char*)
char const;
const

// operator[i] Retorna el carácter de la cadena del


// objeto implícito en la posición i.
// Si i esta fuera de rango lanzar std::out_of_range.
char operator[](unsigned
operator unsigned int)
int const;
const

• Operaciones:

// length() devuelve la cantidad de caracteres


// de la cadena.
unsigned int length() const;
const

// isSubString(s1) devuelve true sii s1 es subcadena


// del objeto implícito.
// Dadas las cadenas s y s1, s1 es subcadena de s sii
// existen cadenas x e y tales que s = x + s1 + y.
bool isSubString(const
const String&) const;
const
bool isSubString(const
const char*)
char const;
const

// subString(inf, sup) devuelve la subcadena del objeto


// implícito que se encuentra entre las posiciones dadas

3
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN

// por inf y sup (inf y sup inclusive).


// Si inf y/o sup se van de rango lanzar std::out_of_range.
// Si inf > sup lanzar la excepción std::invalid_argument.
String subString(unsigned
unsigned int,
int unsigned int)
int const;
const

// replace(c1, c2) Devuelve la cadena resultado de sustituir


// todas las ocurrencias de c1 por c2.
String replace(char
char,
char char)
char const;
const

// toUpperCase() Devuelve la cadena resultado de sustituir


// todas las ocurrencias de caracteres en minúscula
// por su equivalente en mayúscula
String toUpperCase() const;
const

// toLowerCase() Devuelve la cadena resultado de sustituir


// todas las ocurrencias de caracteres en mayúscula
// por su equivalente en minúscula
String toLowerCase() const;
const

4
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN

PARTE 2

Implemente las siguientes sobrecargas de los operadores de inserción y extracción de flujo:

// Escribe una cadena de caracteres en un flujo cualquiera.


ostream& operator<<(ostream&,
operator const String&);

// Lee una cadena de caracteres de un flujo cualquiera.


istream& operator>>(istream&,
operator String&);

PARTE 3

Implemente las siguientes sobrecargas de los operadores de comparación:

// Operadores de comparación entre char* e instancias de String.


bool operator==(const
operator const char*,
char const String&);
bool operator!=(const
operator const char*,
char const String&);
bool operator<(const
operator const char*,
char const String&);
bool operator>(c
operator const char*,
char const String&);
bool operator<=(const
operator const char*,
char const String&);
bool operator>=(const
operator const char*,
char const String&);

PARTE 4

Implemente un programa que pruebe todas y cada una de las funcionalidades (constructores,
destructor, operaciones y operadores) de las clase String pedidas en las partes anteriores. El
archivo debe llamarse “main.cc” (todo en minúsculas).

ENTREGA

La entrega deberá estar compuesta por los archivos “String.cc”, “String.hh” y “main.cc”. La
misma podrá ser realizada hasta las 23:59 del domingo 25 de marzo de 2007.

Potrebbero piacerti anche