Menu
Coddy logo textTech

Metodi di supporto

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

Finora abbiamo visto funzioni che modificano i dati delle struct (come player_take_damage) e funzioni che si limitano a visualizzarli. Ma c'è un'altra categoria importante: le funzioni che calcolano valori derivati dai membri delle struct senza modificare nulla.

Considera una struttura Rectangle che memorizza larghezza e altezza. L’area non viene memorizzata: viene calcolata al momento:

typedef struct {
    double width;
    double height;
} Rectangle;

double rectangle_area(const Rectangle *self) {
    return self->width * self->height;
}

double rectangle_perimeter(const Rectangle *self) {
    return 2 * (self->width + self->height);
}

Questi sono metodi ausiliari. Prendono i dati esistenti della struct e producono un nuovo valore. Nota che usano puntatori const poiché leggono soltanto, senza mai scrivere. Il risultato calcolato viene restituito anziché essere memorizzato nella struct.

Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box));       // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0

Questo schema mantiene le tue struct essenziali: memorizza solo i dati indispensabili e calcola tutto il resto quando serve. Inoltre, garantisce che i valori derivati siano sempre coerenti con lo stato corrente.

challenge icon

Sfida

Facile

Creiamo un modulo Circle che calcola valori derivati dai dati memorizzati. Ti eserciterai a scrivere metodi di supporto: funzioni che calcolano risultati dai membri di una struct senza modificarli.

Creerai tre file:

  • circle.h: dichiara una struct Circle con un solo membro double radius. Dichiara anche due metodi di supporto:
    • circle_area: accetta un puntatore const a Circle e restituisce l'area
    • circle_circumference: accetta un puntatore const a Circle e restituisce la circonferenza
    Usa le include guard con il simbolo CIRCLE_H.
  • circle.c: implementa entrambi i metodi di supporto. Per i calcoli, usa 3.14159 come valore di pi greco. La formula dell'area è pi * radius * radius e quella della circonferenza è 2 * pi * radius. Entrambe le funzioni devono solo leggere il raggio: non modificarlo mai.
  • main.c: crea un Circle e usa i metodi di supporto per calcolarne e visualizzarne le proprietà.

Riceverai un input: il raggio del cerchio (come double).

Nel file principale, inizializza un Circle con il raggio fornito, poi usa i tuoi metodi di supporto per calcolare e stampare l'area e la circonferenza.

Stampa i risultati in questo formato:

Area: {area}
Circumference: {circumference}

Usa %.2f per entrambi i valori, in modo da visualizzare due cifre decimali.

Ad esempio, con un raggio di 5.0, l'output sarebbe:

Area: 78.54
Circumference: 31.42

Provalo tu

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Crea una struct Circle con il raggio dato
    
    // TODO: Usa le funzioni di supporto circle_area e circle_circumference
    // per calcolare e stampare i risultati
    
    // Formato di stampa:
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    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