Revisão: wrapper de String
Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 16 de 61.
Desafio
FácilVamos criar um módulo StringObject que encapsula um array de caracteres alocado dinamicamente. Este desafio de revisão reúne todo o ciclo de vida do objeto — construtor, método somente para leitura e destrutor — trabalhando em conjunto para gerenciar a memória com segurança.
Você criará três arquivos:
stringobj.h: Declare uma structStringObjectcom um único membro:char *text(um ponteiro para uma string alocada dinamicamente). Declare também três funções:create_string: recebe uma entradaconst char *e retorna um ponteiro para um novo StringObject alocadoprint_string: recebe umconst StringObject *e exibe o texto armazenadofree_string: recebe umStringObject *e libera toda a memória alocada
STRINGOBJ_H.stringobj.c: Implemente as três funções. Seu construtor deve alocar memória para a struct e, em seguida, alocar memória para o texto (lembre-se de usarstrlenmais um para o terminador nulo) e copiar a string de entrada. Seu destrutor deve liberar na ordem inversa: primeiro o buffer internotexte, depois, a própria struct. Inclua uma verificação de NULL no destrutor por segurança.main.c: Use seu módulo para criar um objeto de string, exibir seu conteúdo e, em seguida, fazer a limpeza corretamente.
Você receberá uma entrada: uma string de texto para armazenar no seu StringObject.
No arquivo principal, crie um StringObject com o texto fornecido, exiba seu conteúdo, libere a memória e, em seguida, imprima uma mensagem de confirmação.
A função print_string deve produzir a saída neste formato:
Text: {text}Depois de liberar a memória, imprima:
FreedPor exemplo, com a entrada Hello World, a saída seria:
Text: Hello World
FreedExperimente você mesmo
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Remova a quebra de linha, se houver
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Crie um StringObject com o texto de entrada
// TODO: Imprima a string usando print_string
// TODO: Libere o StringObject usando free_string
// TODO: Imprima "Freed" para confirmar a liberação da memória
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos da Programação Modular
Arquivos de cabeçalhoProteções de inclusãoArquivos-fonteFunções estáticasRevisão: calculadora modular4Encapsulamento
Conceito de ponteiros opacosDefinindo structs opacasGetters e settersValidação em settersRevisão: caixa secreta2Objetos e métodos
Structs como objetosO ponteiro 'Self'Correção de constPonteiro vs. valorMétodos auxiliaresRevisão: Gerenciador de pontos5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de vida do objeto
Padrão de construtorPadrão de destrutorInicialização da pilhaCópia profundaRevisão: wrapper de String6Herança por composição
Incorporação de structRegra do primeiro membroAcessando membros do tipo paiUpcastingRevisão: hierarquia de formas9Projeto: Desenhador de Formas
Visão geral do projetoImplementação do círculoImplementação do retânguloUso polimórficoContêiner de formasPratique por conta própria: Compilador de C online