Witam wszystkich ekspertów i miłośników c++. Po latach programowania obiektowego w językach 'wysokiego poziomu' człowiek tak bardzo oddalił się od sprzętu, że teraz co drugie wyrażenie z c czy c++ powoduje zawieszanie się moich półkul mózgowych...
Analizuję ostatnio bibliotekę Mirf do obsługi modułu NRF24L01 poprzez SPI. Biblioteka ta jest napisana w taki sposób, że do sprzętu (SPI) odwołuje się poprzez klasę 'drivera'. Przy inicjacji programu można do Mirf-a przekazać swojego 'drivera' który będzie zajmował się obsługą sprzętu.
Przykład jest bardzo prosty, ale tutaj już nie rozumiem jak to działa. Wygląda to tak jakby klasa drivera była statyczna (nie wymagała instancjalizacji obiektu), ale w kodzie nie widzę nigdzie typowych deklaracji metod 'static' czy 'static inline'.
Oto przykład.
Plik MirfSpiDriver.h
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A teraz deklaracja konkretnego drivera - obsługującego sprzętowe rejestry SPI:
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I tutaj pierwsze pytania: dlaczego ciała metod zadeklarowane są w pliku *.h ?
I czy deklaracja zmiennej:
MirfHardwareSpiDriver MirfHardwareSpi;powoduje powstanie instancji obiektu? Chyba nie. Instancja powstałaby chyba gdyby było:
MirfHardwareSpiDriver MirfHardwareSpi = MirfHardwareSpiDriver();
Czyli klasa zachowuje się jak statyczna...
Później mamy główną klasę do obsługi modułu NRF24L01 zadeklarowaną w sposób:
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A potem w kodzie programu przekazujemy driver:
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Driver SPI w klasie Nrf24l trzymany jest jako wskaźnik, a nie po prostu jako referencja. Znowu: wygląda mi to na klasę statyczną. Tylko dlaczego metody zadeklarowane są jako 'virtual' a nigdzie nie ma 'static'?