- Zakresy (scopes)
- Referencje
- Wskaźniki
- Zagrożenia przy stosowaniu referencji i wskaźników
-
Typ wyliczeniowy
enumienum class
- Zadanie 1 - PasswordCheck
- Zadanie 2 - VectorOfSharedPointers
Za dostarczenie każdego zadania przed 07.06.2020 (niedziela) do 23:59 dostaniesz 2 bonusowe punkty za każde zadanie
- Playlista na YT odnośnie STLa - obejrzyj ile możesz :)
- Przypomnij sobie czym jest klasa i jak się ją pisze - obejrzyj wideo Mirosława Zelenta. UWAGA! Od 22 minuty możesz zaobserwować trochę złych praktyk :D Spróbuj odgadnąć jakich.
Tworzysz moduł do sprawdzania reguł haseł, który otrzymuje dane z formularza kontaktowego z front-endu. Cały moduł to zestaw kilku funkcji. Ich deklaracje mają znaleźć się w pliku nagłówkowym validation.hpp, a implementacje w pliku źródłowym validation.cpp. Twoje zadania to:
-
Zdefiniuj w pliku nagłówkowym nowy typ
ErrorCodez możliwymi wartościami dla błędów przy ustalaniu nowego hasła (1 punkt)- Ok
- PasswordNeedsAtLeastNineCharacters
- PasswordNeedsAtLeastOneNumber
- PasswordNeedsAtLeastOneSpecialCharacter
- PasswordNeedsAtLeastOneUppercaseLetter
- PasswordsDoesNotMatch
- Napisz funkcję
getErrorMessage(), która przyjmie zdefiniowany typ kodu błędu i zwróci stosowny komunikat jako napis. (1 punkt) - Napisz funkcję
doesPasswordsMatch(), która otrzyma dwa hasła i sprawdzi czy są identyczne. Powinna zwrócić odpowiednią wartość typu bool. (1 punkt) - Napisz funkcję
checkPasswordRules(), która przyjmie jedno hasło i losowo zwróci jeden z kodówPasswordNeedsAtLeast*lubOk. (2 punkty) - Napisz funkcję
checkPassword(). Powinna ona przyjąć dwa hasła i używać funkcjidoesPasswordsMatch()w celu określenia czy hasła się zgadzają. W przypadku gdy się nie zgadzają ma ona zwrócić kodPasswordsDoesNotMatch, a w przeciwnym przypadku powinna zwrócić kod błędu zwrócony przez wywołanie funkcjicheckPasswordRules(). (2 punkty) - Dla ambitnych (nieobowiązkowe) - zaimplementuj w funkcji
checkPasswordRules()prawdziwą walidację pozostałych przypadków, które są podane jako kody błędów. Najlepiej, jeśli wykorzystasz funkcje z nagłówka oraz algorytmstd::any_of. Dopisz/zmodyfikuj odpowiednie testy. (4 punkty)
Razem: 7 punktów (+4 dla ambitnych, +2 za dostarczenie przed 07.06.2020 23:59, +3 punkty/osobę za pracę w parze)
int main() {
std::string password;
std::string repeatedPassword;
std::cout << "Set new password: ";
std::cin >> password;
std::cout << "Repeat password: ";
std::cin >> repeatedPassword;
auto result = checkPassword(password, repeatedPassword);
std::cout << getErrorMessage(result) << '\n';
return 0;
}Napisz program, który zawierać będzie 5 funkcji. Deklaracje powinny znaleźć się w pliku nagłówkowym vectorFunctions.hpp, a implementacje w pliku źródłowym vectorFunctions.cpp. Stwórz te pliki.
std::vector<std::shared_ptr<int>> generate(int count)która wygeneruje wektor współdzielonych wskaźników na liczby od0docountvoid print()która wypisze wszystkie elementy ze wskaźników wektoravoid add10()która przyjmie wektor i doda do każdej liczby10void sub10()która przyjmie stały wskaźnik nainti odejmie od tego elementu10void sub10();Która przyjmie wektor współdzielonych wskaźników i wywoła dla każdego elementu powyższe przeciążenie funkcjisub10()
Razem: 5 punktów (1 za każdą funkcję) (+2 za dostarczenie przed 07.06.2020 23:59, +3 punkty/osobę za pracę w parze)
int main() {
auto vec = generate(10);
print(vec);
add10(vec);
print(vec);
sub10(vec);
print(vec);
}- Jeśli nie masz jeszcze forka repo cpp-fundamentals i podpiętego w nim remote coders, to zobacz wcześniejsze prace domowe z Podstaw C++ #2 oraz #1.
- Zaktualizuj swoje repo z remote'a coders -
git fetch coders - Przełącz się na branch module3 -
git checkout module3 - Wyślij branch module3 na swojego forka -
git push origin module3 - Utwórz oddzielną gałąź na pracę domową -
git checkout -b homework3 - Wyślij od razu tę gałąź na forka, zanim zaczniesz implementację -
git push origin homework3 - Rozpocznij implementację samemu lub w parze.
- Zanim wyślesz swoje zmiany za pomocą
git push origin homework3synchronizuj się z forkiem, aby sprawdzić, czy druga osoba już czegoś nie dostarczyła -git pull --rebase origin homework3. Jeśli będą konflikty to je rozwiąż. - Przy zgłoszeniu Pull Requesta wyklikaj, że chcesz go dostarczyć do
coders-school/cpp-fundamentalsbranchmodule3. Opisz go odpowiednio dodając informację o autorach kodu.
- Powtórka z podstaw C++ i narzędzi
- Omówienie rozwiązań dotychczasowych zadań
- Omówienie najczęstszych błędów na podstawie Code Review
- Q&A
- Uwagi
- Konsultacje grupowe na Discordzie