Menu
Coddy logo textTech

Le struct come oggetti

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 6 di 61.

Nei linguaggi orientati agli oggetti, un oggetto è un'entità che raggruppa dati (stato) e funzioni che operano su quei dati (metodi). C non ha oggetti integrati, ma possiamo ottenere lo stesso risultato usando struct e funzioni.

Considera una struct come la parte dei "dati" di un oggetto. Contiene lo stato: i valori che definiscono cos'è attualmente l'oggetto:

typedef struct {
    int value;
} Counter;

Questa struct Counter rappresenta un’entità con un singolo elemento di stato: il suo valore corrente. Per darle un comportamento, scriviamo funzioni che accettano la struct come parametro:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Queste funzioni agiscono come metodi. Operano specificamente sui dati Counter. Passando la struct alle funzioni, simuliamo ciò che altri linguaggi fanno automaticamente quando chiami counter.increment().

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // Stampa: 1
    return 0;
}

La convenzione di denominazione typename_action (come counter_increment) aiuta a organizzare il codice e chiarisce a quale struct appartiene una funzione. Questo schema è il fondamento della programmazione orientata agli oggetti in C.

challenge icon

Sfida

Facile

Costruiamo un semplice modulo Counter che tratta una struct come un oggetto con un comportamento. Organizzerai il codice in tre file per esercitarti nello schema che consiste nel raggruppare dati e funzioni che operano su di essi.

Creerai tre file:

  • counter.h: il tuo file header che dichiara la struct Counter con un singolo membro int value. Dichiara anche due funzioni che agiscono come "metodi" per il contatore: counter_increment (accetta un puntatore a Counter e incrementa il suo valore di 1) e counter_get (accetta un puntatore a Counter e restituisce il suo valore attuale). Usa le protezioni per le inclusioni con il simbolo COUNTER_H.
  • counter.c: il tuo file sorgente che implementa entrambe le funzioni. Ricordati di includere il tuo file header.
  • main.c: il tuo file principale, che crea un Counter, esegue operazioni su di esso e visualizza i risultati.

Riceverai due input interi: il valore iniziale del contatore e il numero di volte da incrementarlo.

Nel tuo file principale, inizializza un Counter con il valore iniziale, quindi chiama counter_increment il numero di volte specificato. Infine, usa counter_get per recuperare e stampare il valore finale.

Stampa il risultato in questo formato:

Final value: {result}

Ad esempio, con un valore iniziale di 5 e 3 incrementi, l'output sarebbe:

Final value: 8

Provalo tu

#include <stdio.h>
#include "counter.h"

int main() {
    // Leggi l'input
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Crea un Counter e inizializzalo con starting_value
    
    // TODO: Chiama counter_increment il numero di volte specificato
    
    // TODO: Usa counter_get per ottenere il valore finale e stamparlo
    // Formato di stampa: "Final value: {result}"
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online