Visualizzazione del saldo
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 26 di 61.
Sfida
FacileIl tuo conto bancario è quasi completo! Hai creato la possibilità di creare conti, depositare fondi e prelevare denaro, ma manca un elemento fondamentale. Al momento, il codice esterno non ha modo di conoscere il saldo attuale. Risolviamo il problema aggiungendo una funzione getter.
Un getter è il modo corretto per esporre dati nascosti in un modulo incapsulato. Invece di rendere pubblico il campo del saldo (cosa che comprometterebbe l'incapsulamento), fornisci una funzione di sola lettura che restituisce il valore. In questo modo i dati rimangono protetti, consentendo comunque un accesso controllato.
Continuerai a lavorare con i tuoi tre file:
account.h: Aggiungi un nuovo prototipo di funzione:get_balance. Questa funzione accetta unconst Account *(poiché legge soltanto i dati e non li modifica mai) e restituisce undoubleche rappresenta il saldo attuale. Mantieni tutte le dichiarazioni esistenti.account.c: Implementa la funzioneget_balance. Restituisce semplicemente il campo del saldo nascosto dell'account. Nota che questa funzione può accedere ai dati interni perché è definita nello stesso file della struct: il codice esterno non può comunque accedervi direttamente.main.c: Ora puoi finalmente vedere cosa succede all'interno dei tuoi account! Crea un account, esegui alcune transazioni e usa il nuovo getter per visualizzare il saldo a ogni passaggio.
Riceverai quattro input: l'ID dell'account (un intero), un importo del deposito, un importo del prelievo e un secondo importo del deposito.
Nel tuo file principale, crea un account e stampa il suo saldo iniziale (dovrebbe essere 0.00). Deposita il primo importo e stampa il nuovo saldo. Preleva l'importo specificato e stampa di nuovo il saldo. Infine, effettua il secondo deposito e stampa il saldo finale. Poi distruggi l'account.
Stampa l'output in questo formato:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedDove 1001 è l'ID dell'account e i saldi corrispondono a: saldo iniziale (0.00), dopo aver depositato 500.00, dopo aver prelevato 300.00 e dopo aver depositato altri 150.00. Formatta tutti i valori del saldo con due cifre decimali usando %.2f.
Con questo getter, il tuo modulo Bank Account offre ora un accesso completo e controllato ai dati dell'account: gli utenti possono vedere il saldo, ma possono modificarlo solo tramite le funzioni validate di deposito e prelievo.
Provalo tu
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double deposit1;
scanf("%lf", &deposit1);
double withdraw_amount;
scanf("%lf", &withdraw_amount);
double deposit2;
scanf("%lf", &deposit2);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
// TODO: Stampa il saldo iniziale usando get_balance
deposit(account, deposit1);
// TODO: Stampa il saldo dopo il primo deposito
withdraw(account, withdraw_amount);
// TODO: Stampa il saldo dopo il prelievo
deposit(account, deposit2);
// TODO: Stampa il saldo dopo il secondo deposito
destroy_account(account);
printf("Account destroyed\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