Implementazione del cerchio
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 45 di 61.
Sfida
FacileContinuiamo 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 baseShapedella lezione precedente, con i tipi puntatore a funzioneDrawFunceAreaFunc.circle.h: Definisci qui la structCircle. Un cerchio incorporaShapecome primo membro (abilitando la regola del primo membro per l’upcasting) e aggiunge un camporadiusdi tipodouble. Dichiara una funzione costruttricecreate_circleche accetta un raggio e restituisce unCircleper valore.circle.c: Implementa qui il comportamento specifico del cerchio:draw_circle: stampaDrawing Circle with radius: X.XX(raggio mostrato con 2 cifre decimali)area_circle: restituisce π × raggio² (usa3.14159per π)create_circle: inizializza unCircle, collega i puntatori a funzione dellaShapeincorporata adraw_circleearea_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 siadrawsiaareatramite i puntatori a funzione dellaShapeincorporata. 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.54Esempio di output quando l’input è 3.5:
Drawing Circle with radius: 3.50
Area: 38.48L’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
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