\czy możecie mi pomóc?? muszę dobrze opisać poniższe zagadnienia... to co wiedziałem napisałem... sprawdźcie czy dobrze a jak nie to proszę pomóżcie
1. Co to jest Mutex (API Windows Mutex)?
Mutex kontroluje dostęp do pliku. Może być otwarty albo zamknięty. Jeśli proces, watek, aplikacja chce mieć dostęp do zasobów na dysku, z których korzysta już inna aplikacja potrzebny jest muter aby nie było błędów. Jeśli aplikacja korzysta z zasobów to blokuje muter a druga jeśli chce korzystać z tych samych zasobów to sprawdza muter czy jest wolny a jeśli nie no to zajmuje się swoimi czynnościami i czasami sprawdza mutex
do obsługi używamy: createmutex releasemutex openmutex
Mutex został pierwotnie opracowany jako algorytm wzajemnego wykluczania procesów współbieżnych (Drekker, Peterson, Lamport), ubiegających się o dostęp do współdzielonych zasobów (inaczej czekających na wejście do sekcji krytycznej)
• Obecnie mutex oznacza tez abstrakcyjny typ danych, który realizuje algorytm wzajemnego wykluczania.
• Najczęściej jest implementowany w jądrze systemu operacyjnego, co gwarantuje bezpieczeństwo.
• Może być związany z kolejką procesów oczekujących, co gwarantuje żywotność i uczciwość (np. kolejka FIFO).
• Dodatkowo proces oczekujący w kolejce może być wstrzymywany, co zapobiega pętli aktywnego oczekiwania (busy-wait)
2. Co zawiera biblioteka STL, na czym polega?
Stl jest standardowa biblioteka w c++ i udostępnia strumienie, klasę do obsługi łańcuchów znaków, kontenery, algorytmy działające na kontenerach i ogólnie algorytmy, są tam wektory listy, algorytmy sortowania zliczania…itp.
3. Co to są kontenery? Jakie mamy ich rodzaje?
Kontenery są to zasobniki na twoje dane, tzn. miejsce w którym możemy przetrzymywać swoje dane i ułatwia przetrzymywanie danych i poruszanie się po nich. Rodzaje: sekwencyjne: Vector, list(lista), Deque(podwojnie laczona kolejka(talia)) to sa podstawowe.asocjacyjne: Zwykla kolejka, kolejka priorytetowa, stos, mapa, zbiór(set).
4. Co to są iteratory? Jakie posiadamy iteratory?
Są to wskaźniki do elementów kontenera, umożliwiają dostęp do danych i przeglądanie ich, inteligentne wskaźniki. Typy: wejściowy- odczyt, wyjściowy-zapis, taki który się porusza do przodu, taki poruszający się w obie strony, taki o swobodnym dostępie.
5. Funkcja wirtualna?
Mamy dwa obiekty z funkcjami wirtualnymi, obiekty są spokrewnione i teraz jeśli jakąś funkcja przyjmuje jako argument któryś tam obiekt to obojętnie jaki obiekt jej podasz ona wywoła odpowiednia funkcje.
====
piszemy klase i to czy zawrzemy funkcje wirtualne czy czystko wirtualne rzutuje na dalsza hierarhie dziedziczenia po tej klasie. tzn decydujac sie na owe funkcje musimy okreslic jak powinna wygladac dalsza hierarhia.
zawieracja funkcje czysto wirtualne wymuszamy na kolejny klasach aby ta funkcje implementowaly. mamy swiadomosc ze ta funkcja musi byc w kazdej klasie pochodnej i (najczesciej) powinna ona byc specyficzna dla tej klasy pochodnej.
gdy zawieramy funnkcje wirtualne to mowimy ze klasa pochodna moze implementoac ta funkcje ale nie musi bo moze skozystac z naszej.
natomiast gdy zawieramy zwykla funkcje to mowimy ze tej funkji nie wolno!!! implementowac. stosujemy to wtedy gdy uznajemy ze ta nasza implementacja jest poprawna dla dowolnej klasy ktora bedzie dziedziczyc po naszej klase.
6. Co to są wątki?
Każdy proces może mieć wiele wątków, watki to są instrukcje wykonywane współbieżnie.
7. Co to jest polimorfizm?
Mamy dwa obiekty z funkcjami wirtualnymi, obiekty są spokrewnione i teraz jeśli jakaś funkcja przyjmuje jako argument któryś tam obiekt to obojętnie jaki obiekt jej podasz ona wywoła odpowiednia funkcje.
8. Różnica między wektorem a kolejką?
W wektorze masz swobodny dostęp do każdego elementu a w kolejce nie z końca
9. Czy się różni mapa od wektora?
Sposobem przechowywania danych: elementy są posortowane według klucza. Mapa to posortowany kontener asocjacyjny. wektor to obiektowa wersja tablicy.
10. Czy się różni proces od wątku?
Każdy proces ma własną, niezależną przestrzeń adresową, w przeciwieństwie do wątków, które korzystają z przestrzeni adresowej procesu-właściciela, a co za tym idzie nie mogą istnieć poza procesem, który je stworzył.
11. czym różni się referencja od wskaźnika?
W przeciwieństwie do wskaźnika referencja nie może być niezainicjalizowana. Jej inicjalizacja następuje tylko raz, podczas definicji zmiennej referencyjnej (zwanej aliasem), i nie podlega zmianie.
12. Co to jest wirtualna klasa bazowa?
Klasa która ma czysto wirtualne funkcje nie ma konstruktora bo konstruktor nie może być wirtualny.
13. Sposoby synchronizacji wątków?
Każdy wątek w systemie ma własny zbiór rejestrów CPU i własny stos. Aby mógł działać, jednostka centralna CPU musi mu przydzielić porcję czasu zwaną kwantem. Wykonywanie wątków w systemach takich jak np. Windows XP wygląda w następujący sposób: System, według określonego algorytmu, przydziela kwant czasu CPU dla jednego z wątków. W tym krótkim momencie wątek wykonuje swój kod. Później następuje przerwanie i system przydziela kwant czasu CPU innemu wątkowi. Znów następuje wykonanie kodu, przerwanie i przydzielenie kwantu czasu CPU kolejnemu wątkowi czekającemu w kolejce. Po krótkim czasie, kwant czasu zostaje znowu przydzielony naszemu "pierwszemu" wątkowi i kontynuuje on swoje wykonanie itd. Należy jeszcze wspomnieć, że niektóre wątki mogą wywłaszczać czas wykonywania innym wątkom, mimo że ich kolejka jeszcze się nie skończyła. Dzieje się tak np. wtedy gdy te mają różne priorytety.
14. Co to jest auto-pointer?
Inteligentny wskaźnik który dba o właściwe zwalnianie pamięci po przekroczeniu czasu życia czyli po wyjściu z zakresu. Wskazuje na obiekty typu jakiegoś. Jest realizowany za pomocą szablonów
Co to jest abstrakcyjna klasa bazowa i czym się charakteryzuje?
Klasa która ma czysto wirtualne funkcje nie ma konstruktora bo konstruktor nie może być wirtualny.
15. Co to jest sekcja krytyczna?
jest to mechanizm pozwalający wykonać szereg instrukcji jak jedna instrukcje atomowa
16. Co oznacza słowo „this"
Wskaźnik do obiektu który jest używany aktualnie I funkcje dzięki nie mu wiedza z jakiego obiektu zostały wywołane I na jakich argumentach działają
17. Co to jest inline?
jest to funkcja. Funkcje inline jak można by się domyśleć z nazwy są funkcjami "w linii" w C++ znaczy to, że kompilator widząc że funkcja jest inline w miejsce jej wywołania nie wstawia jak w normalnym przypadku wskaźnika do tej funkcji w pamięci, lecz wpisuje jej kod w miejsce jej wystąpienia. Takie funkcje dalej jednak występują w pamięci komputera, dzięki czemu możemy tworzyć do nich wskaźniki i używać ich jak w przypadku zwykłych funkcji.
18. Co to jest przeładowania oraz przedefiniowanie operatora?
Stworzenie własnej implementacji istniejących już operatorów. No i używa się ich do własnych obiektów we własnych klasach.
19. Co to jest dziedziczenie?
jedna klasa dziedziczy po drugiej jej zmienne, funkcje, ta klasa która dziedziczy staje się klasa pochodna klasy bazowej.
20. Co to pole bitowe?
Pola bitowe to specjalny typ składnika klasy polegający na tym, że informacja jest przechowywana na określonej liczbie bitów. Długość pola bitowego określa ilość bitów wchodzących w skład pola. Wartość wyrażenia określającego długość pola musi być znana w momencie kompilacji. Pola bitowe są używane w celu oszczędzania pamięci lub do operacji niskiego poziomu wymagających zmian pojedynczych bitów.
21. Co to jest smart-pointer?
Typ obiektu w stylu wskaźnika, który rozszerza jego możliwości
22. Co to jest funkcja zaprzyjaźniona?
Obiekt deklaruje przyjaźń z jakąś funkcja to wtedy ta funkcja jest zaprzyjaźniona z obiektem i może korzystać z jego składników prywatnych
23. Dynamiczne tworzenie obiektów?
Tworzy się obiekty na stercie w trakcie trwania programu, operatory new, delete.
24. Czy destruktor może być wirtualny?
Może być. Ponieważ musi wiedzieć do jakiego obiektu się odwołać, bo jak nie będzie wiedział to odwołuje się do obiektu bazowego.
25. Czy konstruktor może być wirtualny?
nie ma sensu…. Ponieważ każda klasa dziedzicząc po innej klasie musi mieć swój konstruktor
26. Co to jest szablon?
Fabryka funkcji lub klas dla danych typów
27. Co to jest klasa?
Obiekt zdefiniowany przez użytkownika z funkcjami i zmiennymi
28. Co to jest obiekt funkcyjny?
To taka klasa w której jest przeładowany operator nawiasów( )
29. Co to jest lista?
Lista to kontener udostępniany przez STL, nieco mniej popularnym od wektorów
dostęp tylko przez iteratory, dodawanie i usuwanie elementów jest bardzo szybkie i odbywa się w stałym czasie, adresy elementów ulegaja zmianom tak jak w wektorach
29. Co to jest wskaźnik?
Adres obiektu
30. Co to jest konstruktor?
Funkcja która konstruuje obiekt I inicjuje początkowe wartości
31. w jaki sposób można utworzyć klasę?
za pomocą poleceń class, union, struct (czyli unie i struktury)
- Czym się różnią?
mała dygresja o tym, jak to struktura jest tylko w języku c++ tylko dlatego, aby łatwiej było się przenieść z c do c++, bo właściwie struktura jest tym samym co class, poza jedną różnicą.jaka jest różnica? Chodzi o to, że składniki struktury są zawsze public, a jeśli chodzi o class to mamy private, protected i public. I właściwe struktury mogłoby nie być w c++.
32. Unia
chodzi o to, że deklarujemy sobie jakiś tam obszar pamięci, w którym będzie się znajdował określony przez nas typ danych. I tym obszarem gospodarujemy. Coś na kształt pudełka, do które wkładamy co chcemy i wyjmujemy, a pudełko ciągle jest (czyli ta pamięć)
33. Co to jest konstruktor i jakie są jakie rodzaje?
Konstruktor wskazuje na pierwszy element obiektu. ważne w jaki sposób musi być zapis konstruktora kopiującego, aby można było rozpoznać, że jest to kopiujący. Czy jak to ma wyglądać w kodzie.
34. funkcje wirtualne !!
chodzi o to, że jeśli mamy 3 różne klasy 1,2,3 i klasa 2,3 dziedziczy po klasie 1 i jeśli w klasach 2,3 użyjemy tej samej nazwy funkcji (ważne jest to, że jest to ta sama funkcja) i jeśli w klasie 1
naszej funkcji nie damy oznaczenia virtual to kompilator wykona tylko to co znajduje się w klasie 1 tej funkcji(bo tam ślepo sięga) i nie weźmie pod uwagę tego co jest dopisane w klasie 2 i 3.w
jaki sposób (za pomocą czego) musimy skorzystać, aby w ogóle to nasze virtual miało znaczenie. Oczywiście chodzi o wskaźniki
- Co to są wskaźniki i co to jest referencja?
I tutaj ważne, to że przy definiowaniu adresu do którego wskazuje wskaźnik używamy "&" nie oznacza, że to jest referencja, to tylko znaczek, który tak samo wygląda. Zastosowanie "&" przy wskaźniku, czyli zapis wsk = & zmienna. To w takim zapisie "&" zwraca adres danej
WAŻNE Jaka jest istotna różnica pomiędzy referencją a wskaźnikiem?
Wskaźnik może wskazywać na "cokolowiek" obiekt nie musi istnieć (np. wskaźnik może wskazywać na int, czyli: int * wsk). A referencja musi zawsze wskazywać na istniejący obiekt!
35.rzutowanie
czyli np. jeśli chcemy int zmienić na float.w jaki ki sposób wygląda rzutowanie w c a w jaki c++ ?
36. Co oznacza modyfikator volatile?
W skrócie chodzi o to, że dając ten modyfikator zapewniamy sobie, że za każdym razem program będzie wracał do tej danej i na nowo ją pobierał, a nie będzie korzystać sobie z jej kopi, które
mógł gdzieś sobie tymczasowo zapisać.
37. Dziedziczenie. Co się dzieje, jak dziedziczmy po public, po private i po protected.
I tutaj ważne rzeczy: składniki protected i public są dostępne klasie pochodnej bezpośrednio. Można wysnuć cały wywód o tym po co jest protected w klasie. Dzięki niemu jeśli w jakieś klasie bazowej zrobimy składniki protected to nie będę one widzianie globalnie, czyli będą dla całego świata tak jakby private. ALe za to dla klasy pochodnej będę widziane jako public
składnik będzie zastrzeżony dla klasy bazowej i pochodnej. No i jeszcze warto wspomnieć o tym, jak się dziedziczy. Napiszmy class klasa pochodna : public klasa bazowa . To wiadomo, klasa pochodna dziedziczy po klasie bazowe, ale w tym ważne jest słówko public oznacza, ze wszystko zostanie odziedziczone bez zmian (oprócz private, które jest niewidoczna dla klasy pochodnej nigdy)
Jeśli dziedziczymy przez protected (class klasa pochodna : protected klasa bazowa) to elementy klasy bazowej public i protected, zamieniają się w protected w klasie pochodnej. Jeśli dziedziczmy przez private (class klasa pochodna : private klasa bazowa) to elemetny public i protected stają się private.
====
dziedziczenie publiczne:
modeluje relacje "JEST" czyli klasa pochodna jest klasa bazowa ale nie odwrotnie. auto jest pojazdem ale pojazd nie konicznie jest autem. jezeli nie zachodzi relacja "JEST" to nie ma dziedziczenia publicznego!!! bardzo czesty blad w modelowaniu hierarhi klas!!! dziedziczenie publiczne udostepnia nam zjawisko polimorfizmu (to co kochamy najbardziej:P).
dziedziczenie prywatne:
jest to technika implementacji z wykorzystaniem. co to oznacza? nie zachodzi relacja "JEST"!!! poprostu implementujemy nasza klase wykorzystujac jaka klase juz istniejaca.
w 99,9% przypadkow implementacje z wykorzystaniem wykonuje sie poprzez normalne zawieranie obiektu klasy(jako wlasciwosc) w naszej klasie. po co wiec dziedziczenie prywatne? prywatnie dziedziczmy tylko i wylacznie wtedy gdy chcemy implementowac klase z wykorzystaniem innej klasy ale MUSIMY MIEC DOSTEP DO POL PROTECTED TEJ KLASY!!! tylko i wylacznie wtedy!!! w inym przypadku stosujemy technike zawierania.
w dziedziczeniu prywatnym nie zachodzi zjawisko polimorfizmu ani nic z tych rzeczy. jest to dokladnie to samo to zawarcie klasy bazowej jako pola w naszej klasie tyle ze mamy dostep do pol protected.
38. Jakie znasz dynamiczne alokacje pamięci?jak wygląda składnia i co się tam dokładnie dzieje
Znamy malloc z c i operator new z c++.
EDIT: STARAM SIĘ NA BIEŻĄCO ROBIĆ "AKTUALIZACJĘ"





