course: Programación III
unit: 1
cmake project: prog3_unit1_text_v2023_1
Subir a gradescope los siguientes archivos:
Desarrolla la clase Text
que implemente características similares a la clase std::string.
- Esta clase debera contar con un constructor que tomo como argumento un parámetro del tipo
const char*
que represente el contenido inicial y que almacene en la memoria dinámica una copia de este texto. - Debera tener implementado el
copy constructor
que permita realizar de forma segura la copia de un objetoText
a otro objetoText
. - La clase debera contar también con el
move constructor
que permita intercambiar el contenido entre dos objetos del tipoText
. - Debera implementarse correctamente el
destructor
de modo que memoria dinámica que almacena el texto sea liberada. - La clase debera contar con la sobre escritura de los operadores
copy asignment
ymove assignment
. complementos de los constructorescopy/move
. - La clase debera también sobrecargar el operador
^
que se utilizara para realizar la concatenación entre dos objetos del tipoText
o entre un objetoText
y un texto almacenado en en unrvalue
olvalue
del tipoconst char*
. También considerar la sobrecarga del operador^=
. - Debera de sobrecargarse el operador ostream (
<<
) y el operador istream (>>
) - Elaborar el constructor por parámetros del tipo
std::string
, la sobrecarga del operador conversionstring
y el operador=
de modo que se pueda asignar el contenido de un objeto del tipoText
a un objeto del tipostd:string
y viceversa.
Use Case #1: Crear un objeto Text
e imprimirlo
Text text_1 = "Hola Mundo";
std::cout << text_1 << std::endl;
Use Case #2: Crear un objeto Text
leer del teclado e imprimirlo
Text text_1;
std::cin >> text_1;
std::cout << text_1 << std::endl;
Use Case #3: Crear cuatro objetos Text
, leer el contenido de dos del teclado, concatenarlos y asignarlos al tercer objeto, al cuarto asignarle el valor del primero y agregarle al final el texto: "/CUARTO"
Text text_1;
Text text_2;
Text text_3;
Text text_4;
getline(cin, text_1);
getline(cin, text_2);
text_3 = text_1 ^ text_2;
text_4 = text_1;
text_4 ^= "/CUARTO";
std::cout << "Texto 1: " << text_1 << std::endl;
std::cout << "Texto 2: " << text_2 << std::endl;
std::cout << "Texto 3: " << text_3 << std::endl;
std::cout << "Texto 4: " << text_4 << std::endl;
Use Case #4: Crear dos objetos Text
, leer el contenido desde el teclado y realizar un intercambio de valores utilizando el algoritmo std::swap()
.
Text text_1;
Text text_2;
getline(std::cin, text_1);
getline(std::cin, text_2);
std::swap(text_1, text_2);
std::cout << text_1 << endl;
std::cout << text_2 << endl;
Use Case #5: Crear cuatro objetos: dos del tipo Text
y dos del tipo std::string
, leer el contenido desde el teclado de uno del tipo Text
y otro del tipo std::string
, copiar el contenido del primer objeto Text
dentro del segundo objeto std::string
y realizar de forma similar copiar el contenido del primer objeto std::string
dentro del segundo objeto del tipo Text
Text text_1;
std::string text_2;
Text text_3;
std::string text_4;
Text text_5 = string("Hola std::string"); // Constructor x parámetro std::string
getline(std::cin, text_1);
getline(std::cin, text_2);
text_4 = text_1; // Sobrecarga al operador conversión
text_3 = text_2; // Sobrecarga al operador =
std::cout << text_1 << endl;
std::cout << text_2 << endl;
std::cout << text_3 << endl;
std::cout << text_4 << endl;
std::cout << text_5 << endl;