Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

W2.

1 Wysota
wtorek, 29 listopada 2022 18:27

Jeżeli mamy coś oznaczonego const, ale jakąś na przykład


zmienną oznaczymy jako mutable, to mimo const ta część
mutable będzie można zmienić jej stan

W tym celu można również użyć const_cast, ale to się używa


tylko jeśli nie mamy innego wyjścia, w ostateczności, jeśli
wiem, że fizycznie obiekt jest modyfikowalny, ale ktoś nam
go przekazał jako const, to w takiej sytuacji const_cast można
użyć

W rust każda zmienna jest domyślnie const

Przypomnij sobie przekazywanie przez wskaźnik, referencję


oraz chyba kopię ?

Jak piszemy kod to najlepiej od razu oznaczać wszystko jako


const, dopiero jak się z tym nie da zrealizować naszego celu,
jak nam nie działa to możemy usunąć consta, nigdy
odwrotnie

Const char * a
Char jest constowy

Pierwsza połowa wykładu była o const'ach

Druga połowa
ZPR Strona 1
Druga połowa

Analiza przykładu fabryki studentów/nauczycieli

Jak nadpisujemy metodę virtual, to trzeba dopisywać


override w miejscu nadpisywania

union nie zna destruktorów, więc nie może przechowywać


wskaźników unique_ptr

c++ jest zorientowany na wartości


Wskaźnik jest adresem wartości
Referencja jest wskazaniem na wartość

Jest coś takiego jak std::optional, i to pozwala powiedzieć, że


coś jest albo go nie ma, fabryka zwraca obiekt, albo
std::nullopt
std::optional<Student> student = makeStudent(…);
If (!student) {

} i tworzy nam się albo prawidłowy student, albo nic, więc
nie ma problemu że nam się jakiś "pusty student" stworzy,

Mamy również std::variant, to jest taka union, którą rozumie


c++, w każdym momencie przechowuje wartość jednego ze
zdefiniowanych typów, może się zdarzyć na skutek błędu, że
nie przechowuje żadnej, wartość jest przechowywana w
ramach pamięci zaalokowanej na wariant ( nie ma żadnego
zewnętrznego czegoś tam nie zdążyłem ze slajdu przepisać )

Using StudentOrTeacher = std::variant<Student, Teacher>;


std::vector<StudentOrTeacher> studentsAndTeachers;

Jest jeszcze std::monostate


Typ który można dodać jako pierwszy element variant, żeby
ZPR Strona 2
Typ który można dodać jako pierwszy element variant, żeby
oznaczyć "brak wartości"
Domyślnie skonstruowany wariant posiada domyślnie
skonstruowaną wartość pierwszego ze swoich podtypów

std::holds_alternative
Pozwala na sprawdzenie czy w wariancie przechowywana jest
wartość spodziewanego typu, ale to jest najgorsza z
możliwych możliwości, bo jak mamy powiedzmy 5 typów, to
każdy musimy sprawdzić oddzielnym if'em

std::get
Pozwala pobrać wartość określonego typu

std::get_if
Pozwala na warunkowy dostęp do danych, działa na
wskaźnikach

std::visit
Pozwala na zaimplementowanie wzorca projektowego visitor
na wariancie
Podajemy funkcję i wariant (lub kilka z nich)
Sprawdzi, jakiego typu jest wartość w wariancie i coś tam
dalej

Pokazał nam również lambdę w c++

ZPR Strona 3

You might also like