Pobieranie salda
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 26 z 61.
Wyzwanie
ŁatwyTwój moduł konta bankowego jest prawie gotowy! Masz już możliwość tworzenia kont, wpłacania środków i wypłacania pieniędzy, ale brakuje jeszcze jednego ważnego elementu. Obecnie zewnętrzny kod nie ma możliwości sprawdzenia aktualnego salda. Naprawmy to, dodając funkcję pobierającą.
Funkcja pobierająca to właściwy sposób na udostępnienie ukrytych danych w enkapsulowanym module. Zamiast upubliczniać pole salda (co naruszyłoby enkapsulację), udostępniasz funkcję tylko do odczytu, która zwraca tę wartość. Dzięki temu dane pozostają chronione, a jednocześnie można uzyskać do nich kontrolowany dostęp.
Kontynuujesz pracę z trzema plikami:
account.h: Dodaj nowy prototyp funkcji:get_balance. Funkcja przyjmuje argument typuconst Account *(ponieważ tylko odczytuje dane i nigdy ich nie modyfikuje) i zwraca wartość typudoublereprezentującą aktualne saldo. Zachowaj wszystkie istniejące deklaracje.account.c: Zaimplementuj funkcjęget_balance. Po prostu zwraca ona ukryte pole salda konta. Zwróć uwagę, że ta funkcja może uzyskać dostęp do danych wewnętrznych, ponieważ jest zdefiniowana w tym samym pliku co struktura: kod zewnętrzny nadal nie może zajrzeć do środka bezpośrednio.main.c: Wreszcie możesz zobaczyć, co dzieje się na Twoich kontach! Utwórz konto, wykonaj kilka transakcji i użyj nowej funkcji pobierającej, aby wyświetlić saldo na każdym etapie.
Otrzymasz cztery dane wejściowe: identyfikator konta (liczbę całkowitą), kwotę wpłaty, kwotę wypłaty i kwotę drugiej wpłaty.
W pliku głównym utwórz konto i wyświetl jego początkowe saldo (powinno wynosić 0.00). Wpłać pierwszą kwotę i wyświetl nowe saldo. Wypłać podaną kwotę i ponownie wyświetl saldo. Na koniec dokonaj drugiej wpłaty i wyświetl saldo końcowe. Następnie zniszcz konto.
Wyświetl wynik w tym formacie:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedGdzie 1001 to identyfikator konta, a salda odpowiadają kolejno: wartości początkowej (0.00), wartości po wpłacie 500.00, wartości po wypłacie 300.00 i wartości po kolejnej wpłacie 150.00. Formatuj wszystkie wartości salda z dokładnością do dwóch miejsc po przecinku, używając %.2f.
Dzięki tej funkcji pobierającej moduł konta bankowego zapewnia teraz kompletny, kontrolowany dostęp do danych konta: użytkownicy mogą sprawdzać saldo, ale mogą je zmieniać wyłącznie za pomocą funkcji wpłaty i wypłaty, które weryfikują poprawność operacji.
Spróbuj swoich sił
#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: Wypisz saldo początkowe, używając get_balance
deposit(account, deposit1);
// TODO: Wypisz saldo po pierwszej wpłacie
withdraw(account, withdraw_amount);
// TODO: Wypisz saldo po wypłacie
deposit(account, deposit2);
// TODO: Wypisz saldo po drugiej wpłacie
destroy_account(account);
printf("Account destroyed\n");
return 0;
}Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania modularnego
Pliki nagłówkoweZabezpieczenia przed wielokrotnym dołączeniemPliki źródłoweFunkcje statycznePodsumowanie: kalkulator modularny4Enkapsulacja
Koncepcja niejawnych wskaźnikówDefiniowanie niejawnych strukturGettery i setteryWalidacja w setterachPowtórka: tajemnicze pudełko2Obiekty i metody
Struktury jako obiektyWskaźnik „self”Poprawność constWskaźnik czy wartośćMetody pomocniczePodsumowanie: menedżer punktów5Projekt: Proste konto bankowe
Konfiguracja projektuImplementacja konta8Polimorfizm
Wskaźniki do funkcji w strukturachSymulowanie metodKoncepcja interfejsuImplementowanie interfejsówIteracja polimorficznaPodsumowanie: Greeter11Wzorce projektowe w C
Wzorzec SingletonWzorzec fabrykiWzorzec iteratoraPodsumowanie: fabryka loggera3Cykl życia obiektu
Wzorzec konstruktoraWzorzec destruktoraInicjalizacja na stosieKopia głębokaPodsumowanie: klasa opakowująca ciąg znaków6Dziedziczenie przez kompozycję
Osadzanie strukturZasada pierwszego elementuDostęp do elementów klasy nadrzędnejKonwersja w górę hierarchiiPodsumowanie: hierarchia kształtów9Projekt: Rysownik kształtów
Przegląd projektuImplementacja kołaImplementacja prostokątaZastosowanie polimorfizmuKontener kształtówPoćwicz samodzielnie: Kompilator C online