- Zaproponuj właściwą abstrakcję (interfejs)
- Zastosuj dziedziczenie
- Napraw enkapsulację
- Użyj polimorfizmu, aby za pomocą wskaźnika na klasę bazową reprezentować dowolny typ samochodu
- Jak trzymać silniki? Przez wartość, referencję, czy wskaźnik?
- Czy jest problem diamentowy?
- Czy są wycieki pamięci?
- Czy kod jest testowalny?
- (5 XP) Utwórz wyjątek
InvalidGear
. Ma on być rzucany wtedy, gdy ktoś próbuje w niewłaściwy sposób zmienić bieg, np. z 5 na R. Ma on dziedziczyć postd::logic_error
. - (10 XP) Napisz testy jednostkowe do tego kodu. W szczególności przetestuj rzucanie powyższego wyjątku. Skonfiguruj odpowiednio CMake'a.
- (0 XP) Napraw interfejs, aby był łatwy w poprawnym użyciu i trudny do niewłaściwego użycia (np.
accelerate(-999)
). Bez punktów, bo ciężko zautomatyzować tak ogólne zadanie i każdy wymyśli tutaj coś innego. - Przeczytaj artykuł SOLID czyli dobre praktyki w programowaniu obiektowym