Menu
Coddy logo textTech

Implementazione del cerchio

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

challenge icon

Sfida

Facile

Continuiamo a sviluppare il progetto Shape Drawer implementando Circle: una forma concreta che incorpora la struct base Shape e fornisce una propria logica per il disegno e il calcolo dell’area.

Partendo dalle fondamenta della lezione precedente, estenderai il progetto con questi file:

  • shape.h: Mantieni l’interfaccia base Shape della lezione precedente, con i tipi puntatore a funzione DrawFunc e AreaFunc.
  • circle.h: Definisci qui la struct Circle. Un cerchio incorpora Shape come primo membro (abilitando la regola del primo membro per l’upcasting) e aggiunge un campo radius di tipo double. Dichiara una funzione costruttrice create_circle che accetta un raggio e restituisce un Circle per valore.
  • circle.c: Implementa qui il comportamento specifico del cerchio:
    • draw_circle: stampa Drawing Circle with radius: X.XX (raggio mostrato con 2 cifre decimali)
    • area_circle: restituisce π × raggio² (usa 3.14159 per π)
    • create_circle: inizializza un Circle, collega i puntatori a funzione della Shape incorporata a draw_circle e area_circle, imposta il raggio e restituisce il cerchio
  • main.c: Metti insieme tutti gli elementi. Leggi un valore del raggio come input, crea un cerchio usando il costruttore, poi chiama sia draw sia area tramite i puntatori a funzione della Shape incorporata. Stampa l’area con 2 cifre decimali.

Il programma riceverà un input: un valore di raggio (come numero in virgola mobile).

Esempio di output quando l’input è 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

Esempio di output quando l’input è 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

L’intuizione chiave è che Circle contiene una Shape come primo membro, quindi puoi accedere ai puntatori a funzione tramite circle.base.draw e circle.base.area (o come decidi di chiamare il membro incorporato). Quando chiami queste funzioni, passa un puntatore al membro Shape. Ricorda di usare le protezioni di inclusione in tutti i file header.

Provalo tu

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Crea un Circle usando create_circle
    
    // TODO: Chiama draw tramite il puntatore a funzione dello Shape incorporato
    
    // TODO: Chiama area tramite il puntatore a funzione dello Shape incorporato
    // e stampa con 2 cifre decimali: "Area: %.2f\n"
    
    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online