Język C. Solidna wiedza w praktyce. Wydanie VIII

116,13

Opis

Początki programowania bywają trudne, jednak jest to bardzo ważny czas dla programisty. Od tego, jakich nabierze nawyków, w jakim stopniu opanuje zasady tworzenia bezpiecznego kodu i na ile będzie przestrzegał dobrych praktyk, naprawdę wiele zależy. Konieczne jest również dogłębne zrozumienie takich podstaw informatyki jak działanie procesora, zarządzanie pamięcią, wątki czy działanie kompilatora. Okazuje się, że skuteczne przyswojenie podstaw jest zadaniem bardzo trudnym, ale wyjątkowo ważnym i odpowiedzialnym – zarówno dla ucznia, jak i nauczyciela.To ósme, zaktualizowane i uzupełnione wydanie znakomitego podręcznika przeznaczonego dla adeptów języka C i ich nauczycieli. Zawiera doskonałe wprowadzenie do C oraz inżynierii oprogramowania. Materiał zamieszczony w książce jest aktualny i zgodny z nowoczesnymi zasadami pracy. Obszernie wyjaśniono tu zasady tworzenia i działania kodu, a także zagadnienia związane z typami danych, funkcjami, tablicami, operacjami na bitach, wyliczeniami, pracą na plikach i innymi kwestiami ważnymi z punktu widzenia funkcjonalności, wydajności i bezpieczeństwa kodu. To pozycja oparta na zasadach nowoczesnej dydaktyki – zawiera mnóstwo przydatnych przykładów, ćwiczeń, wskazówek i podsumowań. Poszczególne koncepcje wyjaśniono z użyciem pseudokodu, algorytmów i schematów, dzięki czemu zrozumienie języka C staje się dużo łatwiejsze.W tej książce między innymi:obszerne omówienie języka Cfunkcje wprowadzone w standardach C99 i C11zasady bezpiecznego programowaniatesty i debugowanie kodukwestie wydajności a wielowątkowość i systemy wielordzeniowezasady programowania zorientowanego obiektowo: wprowadzenie do C++C: ucz się od najlepszych i programuj jak mistrz!Spis treści:Wprowadzenie 19Rozdział 1. Wprowadzenie do informatyki, internetu i sieci 311.1. Wprowadzenie 321.2. Hardware i software 321.2.1. Prawo Moorea 321.2.2. Organizacja komputera 331.3. Hierarchia danych 351.4. Język maszynowy, język asemblera i język wysokiego poziomu 371.5. Język programowania C 381.6. Biblioteka standardowa C 401.7. C++ i inne oparte na C języki programowania 411.8. Technologia obiektowa 421.8.1. Samochód jako obiekt 421.8.2. Metoda i klasa 421.8.3. Tworzenie egzemplarza 421.8.4. Wielokrotne używanie klasy 431.8.5. Komunikat i wywołanie metody 431.8.6. Atrybut i zmienna egzemplarza 431.8.7. Hermetyzacja i ukrywanie informacji 431.8.8. Dziedziczenie 431.9. Typowe środowisko programowania w języku C 441.9.1. Faza 1. – tworzenie programu 451.9.2. Fazy 2. i 3. – przetwarzanie i kompilowanie programu 451.9.3. Faza 4. – linkowanie programu 451.9.4. Faza 5. – wczytywanie programu 461.9.5. Faza 6. – wykonywanie programu 461.9.6. Problemy, które mogą pojawić się podczas wykonywania programu 461.9.7. Standardowe strumienie wejścia, wyjścia i błędów 461.10. Przykładowa aplikacja w języku C utworzona na platformach Windows, Linux i macOS 461.10.1. Uruchomienie aplikacji napisanej w C w oknie wiersza poleceń systemu Windows 471.10.2. Uruchomienie aplikacji napisanej w C za pomocą GNU C w systemie Linux 501.10.3. Uruchomienie aplikacji napisanej w C za pomocą okna narzędzia Terminal w systemie macOS 521.11. System operacyjny 541.11.1. Windows – własnościowy system operacyjny 551.11.2. Linux – otwarty system operacyjny 551.11.3. Systemy firmy Apple – macOS dla komputerów Mac, iOS dla urządzeń mobilnych iPhone, iPad i iPod touch 551.11.4. System Android firmy Google 561.12. Internet i sieć WWW 561.12.1. Internet – sieć sieci 571.12.2. Sieć WWW – internet przyjazny użytkownikowi 571.12.3. Usługa sieciowa 571.12.4. AJAX 591.12.5. Internet rzeczy 591.13. Wybrana kluczowa terminologia związana z oprogramowaniem 591.14. Na bieżąco z technologiami informatycznymi 62Rozdział 2. Wprowadzenie do programowania w języku C 672.1. Wprowadzenie 682.2. Prosty program w języku C – wyświetlenie wiersza tekstu 682.3. Następny prosty program w języku C – dodawanie dwóch liczb całkowitych 722.4. Koncepcje dotyczące pamięci 772.5. Arytmetyka w języku C 782.6. Podejmowanie decyzji – operatory równości i relacji 822.7. Bezpieczne programowanie w języku C 86Rozdział 3. Programowanie strukturalne w języku C 993.1. Wprowadzenie 1003.2. Algorytm 1003.3. Pseudokod 1003.4. Struktury kontrolne 1013.5. Polecenie wyboru if 1023.6. Polecenie wyboru if-else 1033.7. Polecenie iteracji while 1073.8. Studium przypadku tworzenia algorytmu 1 – iteracja kontrolowana przez licznik 1083.9. Studium przypadku tworzenia algorytmu 2 – iteracja kontrolowana przez wartownik 1113.10. Studium przypadku tworzenia algorytmu 3 – zagnieżdżone polecenia kontrolne 1173.11. Operatory przypisania 1213.12. Operatory inkrementacji i dekrementacji 1213.13. Bezpieczne programowanie w języku C 124Rozdział 4. Struktury warunkowe programu w języku C 1434.1. Wprowadzenie 1444.2. Podstawy iteracji 1444.3. Iteracja oparta na liczniku 1444.4. Konstrukcja for 1464.5. Konstrukcja – uwagi i obserwacje 1494.6. Przykłady użycia polecenia for 1504.7. Konstrukcja switch umożliwiająca wybór spośród wielu możliwości 1534.8. Konstrukcja do-while 1594.9. Polecenia break i continue 1604.10. Operatory logiczne 1624.11. Mylenie operatorów równości (==) i przypisania (=) 1654.12. Podsumowanie programowania strukturalnego 1664.13. Bezpieczne programowanie w języku C 171Rozdział 5. Funkcje w języku C 1875.1. Wprowadzenie 1885.2. Modularyzacja programów w języku C 1885.3. Funkcje biblioteki matematycznej 1895.4. Funkcje 1915.5. Definicja funkcji 1915.5.1. Funkcja square() 1915.5.2. Funkcja maximum() 1955.6. Więcej o prototypie funkcji 1965.7. Stos wywołań funkcji i stos ramek 1995.8. Nagłówki 2025.9. Przekazywanie argumentów przez wartość i przez referencję 2035.10. Generowanie liczb losowych 2045.11. Przykład – gra hazardowa i wprowadzenie typu enum 2085.12. Klasy przechowywania 2115.13. Reguły dotyczące zasięgu 2135.14. Rekurencja 2165.15. Przykład użycia rekurencji – ciąg Fibonacciego 2205.16. Rekurencja kontra iteracja 2235.17. Bezpieczne programowanie w języku C 225Rozdział 6. Tablice w języku C 2456.1. Wprowadzenie 2466.2. Tablica 2466.3. Definiowanie tablicy 2476.4. Przykłady tablic 2486.4.1. Definiowanie tablicy i stosowanie pętli do przypisania wartości elementom 2486.4.2. Inicjalizowanie tablicy w definicji za pomocą listy inicjalizacyjnej 2496.4.3. Określenie wielkości tablicy za pomocą stałej symbolicznej i inicjalizowanie elementów tablicy na podstawie wyniku obliczeń 2506.4.4. Sumowanie elementów tablicy 2516.4.5. Stosowanie tablicy do podsumowania wyników ankiety 2526.4.6. Wizualizacja wartości elementów tablicy za pomocą histogramu 2546.4.7. Rzut kością 60 000 000 razy i podsumowanie wyników za pomocą tablicy 2556.5. Stosowanie tablicy znaków do przechowywania ciągów tekstowych i operowania na nich 2566.5.1. Inicjalizacja tablicy znaków za pomocą ciągu tekstowego 2566.5.2. Inicjalizacja tablicy znaków za pomocą listy znaków 2566.5.3. Uzyskiwanie dostępu do znaków ciągu tekstowego 2566.5.4. Umieszczanie danych wejściowych w tablicy znaków 2576.5.5. Wyświetlanie tablicy znaków przedstawiającej ciąg tekstowy 2576.5.6. Przykład użycia tablicy znaków 2576.6. Statyczna i automatyczna tablica lokalna 2586.7. Przekazywanie funkcji argumentu w postaci tablicy 2606.8. Sortowanie tablicy 2646.9. Studium przypadku – obliczanie średniej, mediany i dominanty za pomocą tablic 2666.10. Wyszukiwanie elementów w tablicy 2706.10.1. Wyszukiwanie liniowe elementu w tablicy 2716.10.2. Wyszukiwanie binarne elementu w tablicy 2726.11. Tablica wielowymiarowa 2756.11.1. Prezentacja tablicy o dwóch indeksach 2756.11.2. Inicjalizacja tablicy dwuwymiarowej 2766.11.3. Definiowanie elementów w wierszu 2786.11.4. Sumowanie elementów tablicy dwuwymiarowej 2786.11.5. Operacje na tablicy dwuwymiarowej 2786.12. Tablica o zmiennej wielkości 2816.13. Bezpieczne programowanie w języku C 284Rozdział 7. Wskaźniki w języku C 3057.1. Wprowadzenie 3067.2. Definiowanie i inicjalizowanie zmiennej wskaźnika 3067.3. Operatory wskaźnika 3077.4. Przekazywanie argumentów do funkcji przez referencję 3097.5. Stosowanie kwalifikatora conts ze wskaźnikiem 3147.5.1. Konwersja znaków ciągu tekstowego na wielkie za pomocą wskaźnika niebędącego stałą do danych niebędących stałą 3157.5.2. Wyświetlanie po jednym znaku ciągu tekstowego za pomocą wskaźnika niebędącego stałą do danych będących stałą 3167.5.3. Próba modyfikacji za pomocą wskaźnika będącego stałą do danych niebędących stałą 3187.5.4. Próba modyfikacji za pomocą wskaźnika będącego stałą do danych będących stałą 3187.6. Sortowanie bąbelkowe z użyciem przekazywania przez referencję 3197.7. Operator sizeof 3227.8. Wyrażenia i arytmetyka wskaźnika 3257.8.1. Dozwolone operatory dla arytmetyki wskaźnika 3257.8.2. Wskaźnik prowadzący do elementu tablicy 3257.8.3. Dodawanie liczby całkowitej do wskaźnika 3257.8.4. Odejmowanie liczby całkowitej od wskaźnika 3267.8.5. Inkrementacja i dekrementacja wskaźnika 3267.8.6. Odejmowanie wskaźników 3277.8.7. Przypisanie jednego wskaźnika innemu 3277.8.8. Wskaźnik do void 3277.8.9. Porównywanie wskaźników 3277.9. Związek między wskaźnikiem i tablicą 3287.9.1. Notacja wskaźnika i przesunięcia 3287.9.2. Notacja wskaźnika i indeksu 3297.9.3. Brak możliwości modyfikacji nazwy tablicy za pomocą arytmetyki wskaźnika 3297.9.4. Ustalanie indeksu i przesunięcia wskaźnika 3297.9.5. Kopiowanie ciągu tekstowego za pomocą tablicy i wskaźnika 3307.10. Tablica wskaźników 3327.11. Studium przypadku – symulacja tasowania i rozdawania kart 3337.12. Wskaźnik do funkcji 3377.12.1. Sortowanie w kolejności rosnącej lub malejącej 3377.12.2. Stosowanie wskaźnika do funkcji podczas tworzenia systemu opartego na menu 3407.13. Bezpieczne programowanie w języku C 342Rozdział 8. Znaki i ciągi tekstowe w języku C 3638.1. Wprowadzenie 3648.2. Podstawy dotyczące znaków i ciągów tekstowych 3648.3. Biblioteka obsługi znaków 3668.3.1. Funkcje isdigit(), isalpha(), isalnum() i isxdigit() 3678.3.2. Funkcje islower(), isupper(), tolower() i toupper() 3688.3.3. Funkcje isspace(), iscntrl(), ispunct(), isprint() i isgraph() 3708.4. Funkcje konwersji ciągu tekstowego 3718.4.1. Funkcja strtod() 3718.4.2. Funkcja strtol() 3728.4.3. Funkcja strtoul() 3738.5. Funkcje biblioteki standardowej wejścia-wyjścia 3748.5.1. Funkcje fgets() i putchar() 3748.5.2. Funkcja getchar() 3768.5.3. Funkcja sprintf() 3768.5.4. Funkcja sscanf() 3778.6. Funkcje biblioteki przeznaczonej do operacji na ciągach tekstowych 3788.6.1. Funkcje strcpy() i strncpy() 3788.6.2. Funkcje strcat() i strncat() 3798.7. Funkcje porównania zdefiniowane w bibliotece przeznaczonej do obsługi ciągów tekstowych 3808.8. Funkcje wyszukiwania zdefiniowane w bibliotece przeznaczonej do obsługi ciągów tekstowych 3828.8.1. Funkcja strchr() 3838.8.2. Funkcja strcspn() 3838.8.3. Funkcja strpbrk() 3848.8.4. Funkcja strrchr() 3848.8.5. Funkcja strspn() 3858.8.6. Funkcja strstr() 3868.8.7. Funkcja strtok() 3868.9. Funkcje dotyczące pamięci zdefiniowane w bibliotece przeznaczonej do obsługi ciągów tekstowych 3878.9.1. Funkcja memcpy() 3888.9.2. Funkcja memmove() 3898.9.3. Funkcja memcmp() 3908.9.4. Funkcja memchr() 3908.9.5. Funkcja memset() 3918.10. Pozostałe funkcje w bibliotece przeznaczonej do obsługi ciągów tekstowych 3918.10.1. Funkcja strerror() 3928.10.2. Funkcja strlen() 3928.11. Bezpieczne programowanie w języku C 393Rozdział 9. Formatowanie danych wejściowych i wyjściowych w języku C 4079.1. Wprowadzenie 4089.2. Strumienie 4089.3. Formatowanie danych wyjściowych za pomocą funkcji printf() 4089.4. Wyświetlanie liczb całkowitych 4099.5. Liczby zmiennoprzecinkowe 4109.5.1. Specyfikatory konwersji e, E i F 4109.5.2. Specyfikatory konwersji g i G 4119.5.3. Prezentacja specyfikatorów konwersji liczb zmiennoprzecinkowych 4119.6. Wyświetlanie ciągów tekstowych i znaków 4129.7. Inne specyfikatory konwersji 4139.8. Określanie szerokości pola i dokładności podczas wyświetlania danych 4149.8.1. Określanie szerokości pola dla wyświetlanej liczby całkowitej 4149.8.2. Określanie dokładności dla liczb całkowitych, zmiennoprzecinkowych i ciągów tekstowych 4159.8.3. Określanie szerokości pola i dokładności wartości 4169.9. Stosowanie opcji w ciągu tekstowym formatowania funkcji printf() 4169.9.1. Wyrównanie do prawej i lewej strony 4169.9.2. Wyświetlanie liczb dodatnich i ujemnych z opcją + i bez niej 4179.9.3. Stosowanie opcji w postaci spacji 4189.9.4. Stosowanie opcji # 4189.9.5. Stosowanie opcji 0 4199.10. Wyświetlanie literałów i sekwencje sterujące 4199.11. Pobieranie za pomocą funkcji scanf() sformatowanych danych wejściowych 4209.11.1. Składnia funkcji scanf() 4209.11.2. Specyfikatory konwersji funkcji scanf() 4209.11.3. Pobieranie liczb całkowitych za pomocą funkcji scanf() 4209.11.4. Pobieranie liczb zmiennoprzecinkowych za pomocą funkcji scanf() 4229.11.5. Pobieranie znaków i ciągów tekstowych za pomocą funkcji scanf() 4239.11.6. Stosowanie zbioru w funkcji scanf() 4239.11.7. Stosowanie szerokości pola podczas pracy z funkcją scanf() 4249.11.8. Pomijanie znaków w strumieniu danych wejściowych 4259.12. Bezpieczne programowanie w języku C 426Rozdział 10. Struktury, unie, operacje na bitach i wyliczenia w języku C 43510.1. Wprowadzenie 43610.2. Definicja struktury 43610.2.1. Struktura odwołująca się do samej siebie 43710.2.2. Definiowanie zmiennej typu struktury 43710.2.3. Nazwy tagów struktury 43810.2.4. Operacje możliwe do przeprowadzania na strukturze 43810.3. Inicjalizacja struktury 43910.4. Uzyskanie dostępu do elementu struktury za pomocą operatorów . i -> 43910.5. Stosowanie struktur wraz z funkcjami 44110.6. Definicja typedef 44110.7. Przykład – wysoko wydajna symulacja tasowania i rozdawania kart 44210.8. Unia 44510.8.1. Deklaracja unii 44510.8.2. Operacje możliwe do przeprowadzania na unii 44510.8.3. Inicjalizacja unii w deklaracji 44610.8.4. Przykład użycia unii 44610.9. Operatory bitowe 44710.9.1. Wyświetlenie za pomocą bitów liczby całkowitej bez znaku 44810.9.2. Uogólnienie funkcji displayBits() i zapewnienie jej przenośności 45010.9.3. Stosowanie operatorów bitowych i, lub, wyłączającego lub i dopełnienia 45010.9.4. Stosowanie operatorów bitowych przesunięcia w lewo i przesunięcia w prawo 45310.9.5. Operatory bitowe przypisania 45410.10. Pole bitowe 45510.10.1. Definiowanie pola bitowego 45510.10.2. Zastosowanie pola bitowego do przedstawienia figury i koloru karty 45610.10.3. Nienazwane pole bitowe 45810.11. Stała wyliczenia 45910.12. Anonimowe struktury i unie 46010.13. Bezpieczne programowanie w języku C 460Rozdział 11. Przetwarzanie plików w języku C 47311.1. Wprowadzenie 47411.2. Plik i strumień 47411.3. Tworzenie pliku o dostępie sekwencyjnym 47511.3.1. Wskaźnik do FILE 47611.3.2. Stosowanie funkcji fopen() do otwierania pliku 47611.3.3. Stosowanie funkcji feof() do sprawdzania pod kątem znacznika końca pliku 47711.3.4. Stosowanie funkcji fprintf() do zapisywania danych w pliku 47711.3.5. Stosowanie funkcji fclose() do zamykania pliku 47711.3.6. Tryb otwarcia pliku 47911.4. Odczytywanie danych z pliku o dostępie sekwencyjnym 48011.4.1. Zerowanie wskaźnika położenia w pliku 48111.4.2. Program pobierający informacje o saldach klientów 48111.5. Plik o dostępie swobodnym 48411.6. Tworzenie pliku o dostępie swobodnym 48511.7. Losowy zapis danych w pliku o dostępie swobodnym 48711.7.1. Stosowanie funkcji fseek() do umieszczania wskaźnika położenia w pliku 48811.7.2. Sprawdzanie pod kątem błędów 48911.8. Odczytywanie danych z pliku o dostępie swobodnym 48911.9. Studium przypadku – program przetwarzający transakcje 49011.10. Bezpieczne programowanie w języku C 496Rozdział 12. Struktury danych w języku C 50712.1. Wprowadzenie 50812.2. Struktura odwołująca się do samej siebie 50812.3. Dynamiczna alokacja pamięci 50912.4. Lista jednokierunkowa 51012.4.1. Funkcja insert() 51612.4.2. Funkcja delete() 51612.4.3. Funkcja printList() 51812.5. Stos 51812.5.1. Funkcja push() 52212.5.2. Funkcja pop() 52312.5.3. Zastosowanie stosu 52312.6. Kolejka 52412.6.1. Funkcja enqueue() 52812.6.2. Funkcja dequeue() 52912.7. Drzewo 52912.7.1. Funkcja insertNode() 53312.7.2. Funkcje nawigacji po drzewie: inOrder(), preOrder() i postOrder() 53312.7.3. Eliminowanie duplikatów 53412.7.4. Binarne drzewo wyszukiwania 53412.7.5. Inne operacje przeprowadzane na drzewie binarnym 53412.8. Bezpieczne programowanie w języku C 534Rozdział 13. Preprocesor w języku C 54713.1. Wprowadzenie 54813.2. Dyrektywa preprocesora #inc
ude 54813.3. Dyrektywa preprocesora #define – stałe symboliczne 54813.4. Dyrektywa preprocesora #define – makra 54913.4.1. Makro z jednym argumentem 55013.4.2. Makro z dwoma argumentami 55113.4.3. Znak kontynuowania makra 55113.4.4. Dyrektywa preprocesora #undef 55113.4.5. Makra i funkcje biblioteki standardowej 55113.4.6. Nie umieszczaj w makrze wyrażenia powodującego efekty uboczne 55113.5. Kompilacja warunkowa 55213.5.1. Dyrektywa preprocesora #if…#endif 55213.5.2. Komentowanie bloków kodu za pomocą #if…#endif 55213.5.3. Warunkowa kompilacja kodu używanego podczas debugowania 55213.6. Dyrektywy preprocesora #error i #pragma 55313.7. Operatory # i ## 55313.8. Numery wierszy 55413.9. Predefiniowane stałe symboliczne 55413.10. Asercje 55413.11. Bezpieczne programowanie w języku C 555Rozdział 14. Inne zagadnienia związane z językiem C 56114.1. Wprowadzenie 56214.2. Przekierowanie operacji wejścia-wyjścia 56214.2.1. Przekierowanie wejścia za pomocą znaku < 56214.2.2. Przekierowanie wejścia za pomocą znaku | 56214.2.3. Przekierowanie wyjścia 56314.3. Zmiennej długości lista argumentów 56314.4. Stosowanie argumentów powłoki 56514.5. Kompilowanie programu składającego się z wielu plików kodu źródłowego 56614.5.1. Deklaracje extern dla zmiennych globalnych w innych plikach 56614.5.2. Prototypy funkcji 56714.5.3. Ograniczenie zasięgu za pomocą słowa kluczowego static 56814.5.4. Plik Makefile 56814.6. Zakończenie działania programu za pomocą exit() i atexit() 56814.7. Sufiksy dla literałów liczb całkowitych i zmiennoprzecinkowych 56914.8. Obsługa sygnałów 57014.9. Dynamiczna alokacja pamięci – funkcje calloc() i realloc() 57214.10. Bezwarunkowe odgałęzienie za pomocą goto 573Rozdział 15. C++ jako lepsza wersja C – wprowadzenie do technologii obiektowej 57915.1. Wprowadzenie 58015.2. C++ 58015.3. Prosty program dodający dwie liczby 58015.3.1. Program w C++ dodający dwie liczby 58015.3.2. Nagłówek 58115.3.3. Funkcja main() 58115.3.4. Deklaracje zmiennych 58115.3.5. Obiekty standardowych strumieni wejścia i wyjścia 58115.3.6. Manipulator strumienia std::endl 58215.3.7. Wyjaśnienie prefiksu std:: 58215.3.8. Połączone strumienie wyjścia 58215.3.9. Polecenie return nie jest wymagane w funkcji main() 58215.3.10. Przeciążanie operatorów 58315.4. Biblioteka standardowa języka C++ 58315.5. Pliki nagłówkowe 58415.6. Funkcja typu inline 58515.7. Słowa kluczowe języka C++ 58715.8. Referencja i parametry przekazywane przez referencję 58715.8.1. Parametry referencyjne 58815.8.2. Przekazywanie argumentów przez wartość i przez referencję 58915.8.3. Referencja jako alias w funkcji 59115.8.4. Zwrot referencji przez funkcję 59215.8.5. Komunikat błędu do niezainicjalizowanej referencji 59315.9. Pusta lista parametrów 59315.10. Argumenty domyślne 59315.11. Jednoargumentowy operator ustalenia zasięgu 59515.12. Przeciążanie funkcji 59615.13. Szablony funkcji 59915.13.1. Definiowanie szablonu funkcji 59915.13.2. Stosowanie szablonu funkcji 60015.14. Wprowadzenie do technologii obiektowej i UML 60215.14.1. Podstawowe koncepcje technologii obiektowej 60215.14.2. Klasy, elementy składowe danych i funkcji 60315.14.3. Projekt i analiza zorientowane obiektowo 60415.14.4. Zunifikowany język modelowania 60415.15. Wprowadzenie do szablonu klasy vector biblioteki standardowej języka C++ 60515.15.1. Problemy związane z opartą na wskaźnikach tablicą w stylu języka C 60515.15.2. Stosowanie szablonu klasy vector 60515.15.3. Obsługa wyjątków – przetwarzanie indeksu spoza zakresu 61015.16. Zakończenie rozdziału 611Rozdział 16. Wprowadzenie do klas, obiektów i ciągów tekstowych 61916.1. Wprowadzenie 62016.2. Definiowanie klasy z funkcją składową 62016.3. Definiowanie funkcji składowej z parametrem 62316.4. Dane składowe, funkcje składowe set i get 62516.5. Inicjalizacja obiektu za pomocą konstruktora 63116.6. Umieszczenie klasy w oddzielnym pliku, aby umożliwić jej wielokrotne użycie 63416.7. Oddzielenie interfejsu od implementacji 63816.8. Weryfikacja danych wejściowych za pomocą funkcji set 64316.9. Zakończenie rozdziału 647Rozdział 17. Klasy – zgłaszanie wyjątków 65517.1. Wprowadzenie 65617.2. Studium przypadku – klasa Time 65617.3. Zasięg klasy i dostęp do jej elementów składowych 66317.4. Funkcje dostępu i funkcje narzędziowe 66417.5. Studium przypadku – konstruktor z argumentami domyślnymi 66417.6. Destruktory 67017.7. Kiedy są wywoływane konstruktor i destruktor? 67117.8. Studium przypadku – pułapka podczas zwrotu odwołania lub wskaźnika do prywatnych danych składowych 67417.9. Domyślne przypisywanie danych składowych 67717.10. Obiekty i funkcje składowe typu const 67817.11. Kompozycja – obiekt jako element składowy klasy 68117.12. Funkcje i klasy zaprzyjaźnione 68617.13. Stosowanie wskaźnika this 68817.14. Statyczne elementy składowe klasy 69417.15. Zakończenie rozdziału 698Rozdział 18. Przeciążanie operatorów i klasa string 71118.1. Wprowadzenie 71218.2. Stosowanie przeciążonych operatorów klasy string biblioteki standardowej 71218.3. Podstawy przeciążania operatorów 71518.4. Przeciążanie operatorów dwuargumentowych 71718.5. Przeciążanie dwuargumentowych operatorów wstawiania danych do strumienia i pobierania danych ze strumienia 71718.6. Przeciążanie operatorów jednoargumentowych 72118.7. Przeciążanie jednoargumentowych operatorów prefiks i postfiks ++ i — 72218.8. Studium przypadku – klasa Date 72318.9. Dynamiczne zarządzanie pamięcią 72818.10. Studium przypadku – klasa Array 73018.10.1. Stosowanie klasy Array 73118.10.2. Definicja klasy Array 73518.11. Operator w postaci funkcji składowej kontra operator w postaci funkcji nieskładowej 74218.12. Konwersja między typami 74318.13. Konstruktor typu explicit i operatory konwersji 74418.14. Przeciążanie funkcji operator() 74718.15. Zakończenie rozdziału 747Rozdział 19. Programowanie zorientowane obiektowo – dziedziczenie 75919.1. Wprowadzenie 76019.2. Klasa bazowa i klasa pochodna 76019.3. Relacje między klasą bazową i klasą pochodną 76319.3.1. Utworzenie i użycie klasy CommissionEmployee 76319.3.2. Utworzenie klasy BasePlusCommissionEmployee bez wykorzystania dziedziczenia 76719.3.3. Tworzenie hierarchii dziedziczenia CommissionEmployee-BasePlusCommissionEmployee 77219.3.4. Hierarchia dziedziczenia CommissionEmployee-BasePlusCommissionEmployee wykorzystująca dane chronione 77619.3.5. Hierarchia dziedziczenia CommissionEmployee-BasePlusCommissionEmployee wykorzystująca dane prywatne 77919.4. Konstruktor i destruktor w klasie pochodnej 78419.5. Dziedziczenie publiczne, chronione i prywatne 78519.6. Stosowanie dziedziczenia w tworzeniu oprogramowania 78619.7. Zakończenie rozdziału 787Rozdział 20. Programowanie zorientowane obiektowo – polimorfizm 79320.1. Wprowadzenie 79420.2. Wprowadzenie do polimorfizmu – polimorficzna gra wideo 79420.3. Relacje między obiektami w hierarchii dziedziczenia 79520.3.1. Wywołanie funkcji klasy bazowej z poziomu obiektu klasy pochodnej 79620.3.2. Skierowanie wskaźnika funkcji pochodnej na obiekt klasy bazowej 79820.3.3. Wywołanie funkcji składowej klasy pochodnej za pomocą wskaźnika klasy bazowej 79920.3.4. Funkcje wirtualne i destruktory wirtualne 80120.4. Typ pola i konstrukcja switch 80820.5. Klasa abstrakcyjna i czysta funkcja wirtualna 80820.6. Studium przypadku – system kadrowo-płacowy oparty na polimorfizmie 81020.6.1. Tworzenie abstrakcyjnej klasy bazowej Employee 81120.6.2. Tworzenie konkretnej klasy pochodnej SalariedEmployee 81420.6.3. Tworzenie konkretnej klasy pochodnej CommissionEmployee 81720.6.4. Tworzenie pośredniej konkretnej klasy pochodnej BasePlusCommissionEmployee 81820.6.5. Przykład przetwarzania polimorficznego 82020.7. (Opcjonalnie) Polimorfizm, funkcje wirtualne i wiązanie dynamiczne "pod maską" 82320.8. Studium przypadku – system kadrowo-płacowy oparty na polimorfizmie, mechanizmie RTTI, rzutowaniu w dół, operatorach dynamic_cast i typeid oraz klasie type_info 82720.9. Zakończenie rozdziału 830Rozdział 21. Dokładniejsza analiza strumieni wejścia i wyjścia 83721.1. Wprowadzenie 83821.2. Strumienie 83821.2.1. Strumienie klasyczne kontra strumienie standardowe 83921.2.2. Nagłówki biblioteki iostream 83921.2.3. Obiekty i klasy strumieni wejścia-wyjścia 84021.3. Strumień wyjścia 84221.3.1. Dane wyjściowe zmiennych typu char * 84221.3.2. Wyświetlanie znaków za pomocą funkcji składowej put() 84321.4. Strumień wejścia 84321.4.1. Funkcje składowe get() i getline() 84421.4.2. Funkcje składowe peek(), putback() i ignore() obiektu istream 84621.4.3. Operacje wejścia-wyjścia zapewniające bezpieczeństwo typu 84621.5. Niesformatowane operacje wejścia-wyjścia przeprowadzane za pomocą funkcji read(), write() i gcount() 84721.6. Wprowadzenie do manipulatorów strumienia 84821.6.1. Podstawa liczb całkowitych w strumieniu – manipulatory dec, oct, hex i setbase 84821.6.2. Dokładność liczb zmiennoprzecinkowych 84921.6.3. Szerokość pola – width() i setw() 85021.6.4. Manipulatory strumienia wyjścia zdefiniowane przez użytkownika 85121.7. Stany formatu strumienia i manipulatorów strumienia 85221.7.1. Zera na końcu wartości i przecinek (manipulator showpoint) 85321.7.2. Wyrównanie wartości (manipulatory left, right i internal) 85421.7.3. Dopełnienie (funkcja fill() i manipulator setfill) 85521.7.4. Wewnętrzna podstawa strumienia (manipulatory dec, oct, hex, showbase) 85721.7.5. Liczby zmiennoprzecinkowe – notacja naukowa oraz z określoną liczbą cyfr po przecinku (manipulatory scientific i fixed) 85721.7.6. Kontrolowanie wielkości liter (manipulator uppercase) 85821.7.7. Stosowanie formatu boolowskiego (manipulator boolalpha) 85921.7.8. Ustawianie i zerowanie stanu formatu za pomocą funkcji składowej flags() 86021.8. Stany błędu strumienia 86121.9. Powiązanie strumieni wyjścia i wejścia 86321.10. Zakończenie rozdziału 863Rozdział 22. Dokładniejsza analiza obsługi wyjątków 87522.1. Wprowadzenie 87622.2. Przykład – obsługa próby dzielenia przez zero 87622.3. Ponowne zgłoszenie wyjątku 88222.4. Rozwinięcie stosu 88322.5. Kiedy używać obsługi wyjątków? 88522.6. Konstruktor, destruktor i obsługa wyjątków 88622.7. Wyjątki i dziedziczenie 88722.8. Przetwarzanie niepowodzenia w wyniku działania operatora new 88722.9. Klasa unique_ptr i dynamiczna alokacja pamięci 89022.10. Hierarchia wyjątków biblioteki standardowej 89322.11. Zakończenie rozdziału 894Rozdział 23. Wprowadzenie do szablonów niestandardowych 90123.1. Wprowadzenie 90223.2. Szablony klas 90223.3. Szablon funkcji przeznaczonej do przeprowadzania operacji na obiekcie specjalizacji szablonu klasy 90623.4. Parametry pozbawione typu 90823.5. Argumenty domyślne parametrów typu szablonu 90823.6. Przeciążanie szablonu funkcji 90923.7. Zakończenie rozdziału 909Dodatek A. Pierwszeństwo operatorów w językach C i C++ 913Dodatek B. Kodowanie znaków ASCII 917Dodatek C. Systemy liczbowe 919C.1. Wprowadzenie 920C.2. Skracanie liczb dwójkowych do ósemkowych i szesnastkowych 922C.3. Konwersja liczb ósemkowych i szesnastkowych na dwójkowe 923C.4. Konwersja liczb dwójkowych, ósemkowych i szesnastkowych na dziesiętne 924C.5. Konwersja liczb dziesiętnych na dwójkowe, ósemkowe i szesnastkowe 925C.6. Ujemne liczby dwójkowe – notacja dopełnienia do dwóch 926Dodatek D. Sortowanie – informacje szczegółowe 931D.1. Wprowadzenie 932D.2. Notacja dużego O 932D.3. Sortowanie przez wybieranie 933D.4. Sortowanie przez wstawianie 936D.5. Sortowanie przez scalanie 939Dodatek E. Wielowątkowość oraz inne zagadnienia związane ze standardami C99 i C11 949E.1. Wprowadzenie 950E.2. Nowe nagłówki w C99 951E.3. Wyznaczone metody inicjalizacyjne i złożone literały 951E.4. Typ bool 954E.5. Niejawne użycie typu int w deklaracji funkcji 955E.6. Liczby zespolone 956E.7. Usprawnienia w preprocesorze 957E.8. Inne funkcje standardu C99 958E.8.1. Minimalne ograniczenia zasobów kompilatora 959E.8.2. Słowo kluczowe restrict 959E.8.3. Niezawodne kopiowanie liczb całkowitych 959E.8.4. Element składowy w postaci elastycznej tablicy 960E.8.5. Złagodzone ograniczenia dotyczące inicjalizacji agregowanych elementów 960E.8.6. Operacje matematyczne dla typów generycznych 960E.8.7. Funkcja typu inline 961E.8.8. Zakończenie działania funkcji bez wyrażenia 961E.8.9. Predefiniowany identyfikator __func__ 961E.8.10. Makro va_copy 961E.9. Nowe funkcje w standardzie C11 962E.9.1. Nowe nagłówki C11 962E.9.2. Obsługa wielowątkowości 962E.9.3. Funkcja quick_exit() 969E.9.4. Obsługa Unicode 969E.9.5. Specyfikator funkcji _Noreturn 970E.9.6. Wyrażenia typów generycznych 970E.9.7. Dodatek L – możliwości w zakresie analizy i niezdefiniowane zachowanie 970E.9.8. Kontrola wyrównania do granicy 971E.9.9. Asercje statyczne 971E.9.10. Typy zmiennoprzecinkowe 971E.10. Zasoby dostępne w internecie 971Dodatki w internecie 975Dodatek F. Użycie debugera Visual Studio FTPDodatek G. Użycie debugera GNU FTP

Podręczniki szkolne

wyrażenia po angielsku, spox school, kursy biologia, jak zostać rzeczoznawcą majątkowym, 4 kwietnia 2021, dotacja z urzędu pracy na co można przeznaczyć, architektura wnętrz studia, wab wrocław, katedra fizyki i chemii am szczecin, iza bella, bydgoszcz praca indeed

yyyyy