Riepilogo: wrapper di stringhe
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 16 di 61.
Sfida
FacileCostruiamo un modulo StringObject che racchiude un array di caratteri allocato dinamicamente. Questa sfida di ripasso riunisce l’intero ciclo di vita dell’oggetto, il costruttore, un metodo di sola lettura e il distruttore, che lavorano insieme per gestire la memoria in modo sicuro.
Creerai tre file:
stringobj.h: dichiara una structStringObjectcon un solo membro:char *text(un puntatore a una stringa allocata dinamicamente). Dichiara anche tre funzioni:create_string: riceve un inputconst char *e restituisce un puntatore a un nuovo StringObject allocatoprint_string: riceve unconst StringObject *e visualizza il testo memorizzatofree_string: riceve unStringObject *e libera tutta la memoria allocata
STRINGOBJ_H.stringobj.c: implementa tutte e tre le funzioni. Il costruttore deve allocare memoria per la struct, poi allocare memoria per il testo (ricordastrlenpiù uno per il terminatore nullo) e copiare la stringa di input. Il distruttore deve liberare la memoria nell’ordine inverso: prima il buffer internotext, poi la struct stessa. Includi un controllo NULL nel distruttore per sicurezza.main.c: usa il tuo modulo per creare un oggetto stringa, visualizzarne il contenuto e poi liberare correttamente la memoria.
Riceverai un input: una stringa di testo da memorizzare nel tuo StringObject.
Nel file main, crea un StringObject con il testo fornito, stampa il suo contenuto, libera la memoria e poi stampa un messaggio di conferma.
La funzione print_string deve produrre l’output in questo formato:
Text: {text}Dopo aver liberato la memoria, stampa:
FreedPer esempio, con l’input Hello World, l’output sarebbe:
Text: Hello World
FreedProvalo tu
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Rimuovi il carattere di nuova riga, se presente
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Crea uno StringObject con il testo di input
// TODO: Stampa la stringa usando print_string
// TODO: Libera lo StringObject usando free_string
// TODO: Stampa "Freed" per confermare la pulizia
return 0;
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Basi di programmazione modulare
File di intestazioneGuardie di inclusioneFile sorgenteFunzioni staticheRipasso: calcolatrice modulare4Incapsulamento
Il concetto di puntatori opachiDefinire struct opacheGetter e setterLa convalida nei setterRiepilogo: scatola segreta2Oggetti e metodi
Le struct come oggettiIl puntatore 'Self'Correttezza constPuntatore o valoreMetodi di supportoRiepilogo: gestore di punti5Progetto: Conto bancario semplice
Configurazione del progettoImplementazione del conto8Polimorfismo
Puntatori a funzione nelle structSimulare i metodiIl concetto di interfacciaImplementare le interfacceIterazione polimorficaRiepilogo: Greeter11Pattern di progettazione in C
Pattern SingletonPattern FactoryPattern IteratorRiepilogo: Factory di Logger3Ciclo di vita degli oggetti
Pattern del costruttorePattern del distruttoreInizializzazione sullo stackCopia profondaRiepilogo: wrapper di stringhe6Ereditarietà tramite composizione
Incorporamento delle structLa regola del primo membroAccesso ai membri della classe baseUpcastingRiepilogo: gerarchia di forme9Progetto: Disegnatore di forme
Panoramica del progettoImplementazione del cerchioImplementazione del rettangoloUtilizzo polimorficoContenitore di formeEsercitati da solo: Compilatore C online