Resumen: String Wrapper
Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 16 de 61.
Desafío
FácilConstruyamos un módulo StringObject que envuelva un arreglo de caracteres asignado dinámicamente. Este desafío de repaso reúne el ciclo de vida completo del objeto, el constructor, el método de solo lectura y el destructor, todos trabajando juntos para gestionar la memoria de forma segura.
Crearás tres archivos:
stringobj.h: Declara una estructuraStringObjectcon un único miembro:char *text(unpointera unstringasignado dinámicamente). Declara también tres funciones:create_string: recibe una entradaconst char *y returns un pointer a un StringObject recién asignadoprint_string: recibe unconst StringObject *y displays el texto almacenadofree_string: recibe unStringObject *y libera toda la memoria asignada
STRINGOBJ_H.stringobj.c: Implementa las tres funciones. Tu constructor debe asignar memoria para la estructura, después asignar memoria para el texto (recuerdastrlenmás uno para el terminador null) y copiar el string de entrada. Tu destructor debe liberar en orden inverso: primero el búfer internotexty después la propia estructura. Incluye una comprobación de NULL en tu destructor por safety.main.c: Usa tu módulo para crear un objeto string, displays su contenido y después realiza una limpieza adecuada.
Recibirás una entrada: un string de texto que se almacenará en tu StringObject.
En tu archivo principal, crea un StringObject con el texto proporcionado, muestra su contenido, libera la memoria y después muestra un mensaje de confirmación.
La función print_string debe producir la salida con este formato:
Text: {text}Después de liberar, muestra:
FreedPor ejemplo, con la entrada Hello World, la salida sería:
Text: Hello World
FreedPruébalo tú mismo
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Eliminar el salto de línea si está presente
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Create a StringObject with the input text
// TODO: Imprimir la cadena usando print_string
// TODO: Free the StringObject using free_string
// TODO: Imprimir "Freed" para confirmar la limpieza
return 0;
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de programación modular
Archivos de cabeceraGuardas de inclusiónArchivos fuenteFunciones estáticasRepaso: Calculadora modular4Encapsulamiento
Concepto de punteros opacosDefinición de structs opacosGetters y SettersValidación en settersResumen: Caja secreta7Punteros a funciones
Declaración de punteros a funcionesLlamada a punteros a funcionesTypedef para punteros a funcionesPasar funciones como argumentosRepaso: Dispatch de calculadora10Contenedores genéricos
Repaso de punteros voidWrapper genéricoSwap genéricoComparación genéricaRepaso: Array genérico2Objetos y métodos
Structs como objetosEl puntero 'Self'Const CorrectnessPuntero vs. ValorMétodos auxiliaresResumen: Point Manager5Proyecto: Cuenta bancaria simple
Configuración del proyectoImplementación de la cuenta3Ciclo de vida de los objetos
Patrón ConstructorPatrón DestructorInicialización en StackCopia profundaResumen: String Wrapper6Herencia mediante composición
Incrustación de StructsLa regla del primer miembroAcceso a miembros padreUpcastingResumen: Jerarquía de formas9Proyecto: Dibujador de figuras
Descripción general del proyectoImplementación del círculoImplementación del rectánguloUso polimórficoContenedor de figurasPractica por tu cuenta: Compilador de C online