Menu
Coddy logo textTech

Resumen - Clase String

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 26 de 104.

challenge icon

Desafío

Fácil

Vamos a construir una clase String completa que gestione su propio arreglo dinámico de caracteres, reuniendo todos los conceptos de constructores y destructores de este capítulo. Este es un ejercicio clásico que refleja cómo funciona std::string internamente.

Crearás dos archivos para organizar tu código:

  • String.h: Define tu clase String siguiendo la Regla de los Cinco. Tu clase debe gestionar un puntero char* llamado data y un miembro size_t length. Implementa:
    • Un constructor por defecto que cree una cadena vacía (asigna un solo carácter para el terminador nulo, establece la longitud en 0). Imprime "Default constructed"
    • Un constructor parametrizado que tome un const char* y copie la cadena de C en una memoria recién asignada. Imprime "Constructed: <text>"
    • Un constructor de copia que realice una copia profunda de otro String. Imprime "Copied: <text>"
    • Un constructor de movimiento (marcado como noexcept) que transfiera la propiedad. Imprime "Moved: <text>" usando el texto antes de anular el origen
    • Un destructor que libere la memoria de forma segura (verifica si es nulo). Imprime "Destroyed: <text>" (imprime "Destroyed: (empty)" si data es nulo o la longitud es 0)
    • Un método size() que devuelva la longitud
    • Un método c_str() que devuelva el puntero de caracteres (devuelve "" si es nulo)
  • main.cpp: Demuestra todos los constructores trabajando juntos. Lee una cadena de texto de la entrada, luego:
    • Crea un String llamado s1 usando el constructor por defecto
    • Crea un String llamado s2 con el texto de entrada
    • Crea un String llamado s3 copiando s2
    • Crea un String llamado s4 moviendo desde s2
    • Imprime "--- Status ---"
    • Para cada cadena (de s1 a s4), imprime "s<n>: \"<text>\" (length: <len>)"

Usa listas de inicialización en todos los constructores para mayor eficiencia. Después del movimiento, s2 debe estar vacío con longitud 0, mientras que s4 conserva el texto original. Los mensajes del destructor al final mostrarán los cuatro objetos siendo limpiados en orden inverso a su creación.

Incluye <cstring> para strlen y strcpy, y <utility> para std::move(). No olvides los protectores de inclusión (header guards) en tu archivo de cabecera.

Pruébalo tú mismo

#include <iostream>
#include <string>
#include "String.h"

using namespace std;

int main() {
    string input;
    getline(cin, input);

    // TODO: Crear String s1 usando el constructor por defecto

    // TODO: Crear String s2 con el texto de entrada

    // TODO: Crear String s3 copiando s2

    // TODO: Crear String s4 moviendo desde s2 (usar std::move)

    // Imprimir el encabezado de estado
    cout << "--- Status ---" << endl;

    // TODO: Imprimir el estado de cada string de s1 a s4
    // Formato: "s<n>: \"<text>\" (length: <len>)"

    return 0;
}

Todas las lecciones de Programación Orientada a Objetos