Implementacja konta
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 23 z 61.
Wyzwanie
ŁatwyTeraz czas ożywić Twoje konto bankowe! Interfejs publiczny masz już utworzony w account.h: teraz zaimplementujesz ukryte elementy wewnętrzne, dzięki którym wszystko działa.
Na podstawie swojej wcześniejszej pracy dodasz plik źródłowy zawierający tajną definicję struktury i rzeczywiste implementacje funkcji. To właśnie tutaj naprawdę zachodzi enkapsulacja: ciało struktury istnieje wyłącznie w pliku .c i jest całkowicie niewidoczne dla osób korzystających z Twojej biblioteki.
Będziesz pracować z trzema plikami:
account.h: Istniejący plik nagłówkowy z deklaracją nieprzezroczystego typuAccounti prototypami funkcjicreate_accountorazdestroy_account. Zachowaj strażniki nagłówka zACCOUNT_H.account.c: Tutaj dzieje się magia. Zdefiniuj właściwąstruct Accountz dwoma ukrytymi polami:int id(identyfikator konta) orazdouble balance(dla nowych kont początkowo 0.0). Zaimplementuj konstruktor, który przydziela pamięć, ustawia identyfikator na podstawie parametru i inicjalizuje saldo wartością zero. Zaimplementuj destruktor, który prawidłowo zwalnia pamięć.main.c: Przetestuj swoją implementację, tworząc konto i sprawdzając, czy działa. Ponieważ pola struktury są ukryte, nie możesz zajrzeć do jej wnętrza, ale możesz sprawdzić, czy cykl życia działa prawidłowo.
Otrzymasz jedno wejście: identyfikator konta (liczbę całkowitą), który należy przypisać do nowego konta.
W pliku main utwórz konto z podanym identyfikatorem, wypisz komunikat potwierdzający jego utworzenie i pokazujący identyfikator, a następnie zniszcz konto i potwierdź zwolnienie zasobów.
Wypisz wynik w tym formacie:
Account 1001 created
Account destroyedWartość 1001 zastąp rzeczywistym identyfikatorem otrzymanym na wejściu.
Pamiętaj: plik main.c nie może uzyskać bezpośredniego dostępu do account->id ani account->balance. Te pola są całkowicie ukryte w pliku account.c. Na razie użyjesz do komunikatu wyjściowego identyfikatora z wejścia. W kolejnych lekcjach dodasz funkcje pobierające, które pozwolą prawidłowo odczytywać ukryte dane.
Spróbuj swoich sił
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
// TODO: wczytaj account_id z wejścia
scanf("%d", &account_id);
// TODO: utwórz konto za pomocą create_account() i wypisz "Account <id> created"
// TODO: zniszcz konto za pomocą destroy_account() i wypisz "Account destroyed"
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