Riepilogo: Greeter
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 43 di 61.
Sfida
FacileCreiamo un sistema Greeter che dimostri il polimorfismo tramite puntatori a funzione: lo stesso tipo di struct produce output diversi a seconda della funzione di saluto assegnata.
Organizzerai il codice in tre file:
greeter.h: Definisci qui l'interfaccia del greeter. Crea un tipo puntatore a funzione chiamatoGreetFuncche accetta unconst char*(un nome da salutare) e non restituisce nulla. Poi definisci una structGreetercontenente unlanguage(unconst char*) e un puntatore a funzionegreetdi tipoGreetFunc.greeter.c: Implementa le funzioni di saluto che rappresentano lingue diverse:greet_english: stampaHello, name!greet_spanish: stampaHola, name!
main.c: Metti insieme qui tutti gli elementi. Crea due istanze diGreeter, una per l'inglese e una per lo spagnolo, ciascuna associata alla rispettiva funzione di saluto. Leggi un nome come input, quindi chiama la funzionegreetper entrambi i greeter per dimostrare il comportamento polimorfico.
Il programma riceverà un singolo input: un nome da salutare.
Crea un greeter inglese con la lingua impostata su English e un greeter spagnolo con la lingua impostata su Spanish. Per ciascun greeter, stampa la lingua seguita da due punti e uno spazio, quindi chiama la sua funzione greet con il nome inserito.
Esempio di output quando l'input è Maria:
English: Hello, Maria!
Spanish: Hola, Maria!Esempio di output quando l'input è Carlos:
English: Hello, Carlos!
Spanish: Hola, Carlos!Entrambi i greeter sono dello stesso tipo Greeter, eppure producono saluti diversi perché a ciascuno è assegnata una funzione diversa al membro greet. Ricorda di usare le include guard nel file header.
Provalo tu
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// Leggi il nome inserito
char name[100];
scanf("%s", name);
// TODO: Crea un greeter in inglese
// - Imposta language su "English"
// - Imposta greet sulla funzione greet_english
// TODO: Crea un greeter in spagnolo
// - Imposta language su "Spanish"
// - Imposta greet sulla funzione greet_spanish
// TODO: Per ogni greeter:
// 1. Stampa language seguito da ": "
// 2. Chiama la funzione greet con il nome
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