C++ bez cholesterolu

Przedmowa

Poniższy materiał powstał na przełomie kilku ostatnich lat. Tworzyło się to dość spontanicznie na podstawie zbieranych przeze mnie przez pewien czas informacji. Znajdzie się tutaj zatem poza opisem samego C++ oraz jego biblioteki standardowej również kilka innych ciekawostek, w tym elementów biblioteki standardowej Unixa (no, powiedzmy POSIX-a). Do napisania tego zostałem zainspirowany po części chęcią właściwego objaśnienia C++ tym, którzy chcieliby go poznać, a zarazem jest to też po części wyraz mojego sprzeciwu wobec sposobu, w jaki jest on wciąż powszechnie nauczany. W szczególności zaś następujące rzeczy:

Nie roszczę sobie oczywiście prawa do bycia "edukatorem" C++, ale takoż starałem się, by materiał był w miarę sensownie uporządkowany, jak też żeby łatwo było coś w nim znaleźć. Jedną z rzeczy, jaką starałem się tu zachować, to trzymanie się w materiale związków pomiędzy elementami C++ raczej logicznych, niż wynikających z czasów, w jakich zostały opracowane (a właśnie ten drugi sposób porządkowania najczęściej występuje w książkach).

Parę jeszcze drobnych uwag, przede wszystkim "jak z tego korzystać". Otóż z góry uprzedzam, że zebrany tu materiał nie zastąpi ci książki z uwagi na to, że jest tutaj dość mało przykładów (i to najwyżej oględnych), a zadań to już nie ma w ogóle. Dlatego polecam zaopatrzenie się w jakieś źródło konkretnych zadań do zrobienia. Materiał zebrany tutaj opisuję od strony, od jakiej ja sam go znam, nie zabraknie więc paru dość istotnych rzeczy, które często umykają autorom książek o C++ (ja się na takie rzeczy nadziałem w praktyce lub dowiedziałem się "od kumpla" :). Inną kwestią jest też to, że starałem się materiał wyłożyć "w komplecie", nie można zatem traktować tego jako "krok po kroku". Jeśli cię jedna część znuży, śmiało przechodź do następnej. Choćby dlatego też, że niektóre części materiału mogą się okazać nużące, gdyż mam zwyczaj rozwodzenia się niekiedy nad niektórymi ciekawostkami. :)

Serdecznie dziękuję również wszystkim ludziom, którzy przysyłali swoje uwagi i wnioski, jak również poprawki, dzięki którym strona ta zyskała na jakości. Do zadowalającej jakości jednak na pewno jest jej jeszcze "trochę" co najmniej. Dlatego zapraszam również wszystkich, którzy chcieliby tą stronę wzbogacić o jakieś dodatkowe przykłady i informacje. Wszelkie wnioski i uwagi nt. tej strony proszę kierować do mnie: ethouris@wp.pl. Jesli ktoś potrzebuje, to jest też dostępna wersja oryginalna, gdzie można znaleźć wersję spakowaną do przeglądania offline.

Notatka od P.A.

W sumie, to warto byłoby poczytać coś o C++ co napisał jakiś dobry fachowiec, praktyk i ogarnięty systemowiec. No i proszę - znalazł się taki - kurs z (kiedyś) CBX, który ściągnąłem kilkanaście lat temu, chroniąc go przed zagubieniem w sieci... Stara strona Kursu już nie istnieje, ale u mnie zawsze znajdzie on swoje przytulne miejsce i schronienie... Piotr Arłukowicz

Uznałem, że ten kurs jest dość wartościowy, ze względu na duże doświadczenie Autora, Jego dość żywy i swobodny język, oraz pewne szczegóły płynące z doświadczenia programisty znającego na wylot kilka klasycznych systemów operacyjnych sprawiają, że czyta się przyjemnie i z zainteresowaniem. Niektórych wiadomości zawartych w tym kursie próżno szukać w najlepszych książkach. Autor niektóre rzeczy osobiście sam przetestował, często łącząc różne odległe tematy.

Jak ze wszystkim - niestety, istnieją także braki. Czasami Autor niezbyt jasno tłumaczy pewne subtelności języka C++, czasami wręcz pomija (świadomie lub nie) pewne aspekty. W niektórych miejscach wprost pisze, że "nie pamięta", lub "coś nie jest istotne". Dlatego ten kurs to nie jest wyczerpujące kompendium wiedzy o C++.

Mimo wszystko, warto przeczytać, chociaż możliwe, że ten kurs będzie dość "ciężko-strawny" dla osób początkujących, które dopiero stawiają swoje pierwsze, nieśmiałe kroki w świecie programowania. Komu bym ten kurs polecał? Przede wszystkim swoim studentom z Języków Programowania, ale także tym, którzy już coś z programowania ogarnęli. Pewne podstawy są niezbędne, aby wysiłek ich zrozumienia nie przesłaniał śmiałych idei Autora - przedstawianie C++ w taki sposób, w jaki mógłby być przedstawiany częściej. Warto znać np. podstawowe konstrukcje języka i idee stojące za logiką programowania. Warto znać przynajmniej podstawy obiektowości. Autor pisze także o pewnych zaawansowanych cechach biblioteki standardowej, którą także - oczywiście - warto znać,przynajmniej w podstawowym zakresie. Moim zdaniem kurs ten raczej nie zastąpi porządnego kursu akademickiego lub dobrze napisanej książki, ale może stanowić wartościowe uzupełnienie "klasycznej" wiedzy o C++ uzyskanej w trakcie zajęć i podczas ćwiczeń. Zatem - polecam!

Co zmieniłem? Bardzo niewiele. Ingeruję w treść jedynie w takich miejscach, w których Autor popełnił literówkę lub coś naprawdę mocno zamieszał (literówek lub miejsc niejasnych jest jednak bardzo niewiele). W prawie każdym takim miejscu umieszczam notatkę w postaci nawiasów kwadratowych oraz dopisku małymi literami "przyp.AP.", aby było wiadomo, że dane zdanie nie pochodzi z oryginalnego materiału. Wyjaśnienia, które dodałem mogą np. dotyczyć zbyt krótkiego zdania, zbyt okrojonego przykładu, lub np. jak w rozdziale na temat Biblioteki Standardowej C - gdzie wstawiłem dokładny tytuł książki i autora, o których Autor przyznał, że "nie pamięta dokładnie". Mam nadzieję, że moje nieliczne uzupełnienia nie uszkodzą pierwotnej postaci Kursu, a jedynie delikatnie go doszlifują i wzbogacą.

Z poważniejszych zmian które wprowadziłem: usunąłem numerację rozdziałów, która była w oryginale błędna (powtarzał się np. rozdział 2.7 z różną treścią, istniały odwołania do nie istniejącego rozdziału II.B.*, itp.). Odnośniki do rozdziałów, które były wyrażone w treści jako np. "rozdział 2.9" zastąpiłem bezpośrednim tytułem danego rozdziału i linkiem do niego, dzięki czemu numeracja stała się zbędna. Oprócz tego przerobiłem całość dokumentów HTML na PHP, przez co odpadło mi edytowanie tych samych treści w wielu plikach i katalogach jednocześnie. Dodatkowo, mogę teraz korzystać ze swojego nagłówka strony i ze swojej stopki, które wewnątrz Kursu przygotowałem w taki sposób, aby ułatwiały nawigację. To jest większość zmian, które zrobiłem. Poprawki literówek lub zastąpienie pojedynczych słów nie są oznaczone moimi przypisami - uznałem, że tak drobne zmiany nie wymagają komentarza. Mam nadzieję, że tego typu "opracowanie" pozwoli Kursowi przeżyć jeszcze parę lat, a kto wie - może z czasem uda się dopisać jeszcze jakiś rozdział? Standard zmienił się bardzo od czasów, gdy Kurs powstał.

Prawa autorskie

Kurs został opracowany przez użytkownika grupy pl.comp.lang.c, podpisującego się: Sektor van Skijlen. Z tego, co udało mi się ustalić, to prawdziwym Autorem może być Michał Małecki - ale nie jest to pewne. Po prostu znalazłem gdzieś nick Sektor van Skijlen razem z takim imieniem i nazwiskiem, w stopce podpisu mailowego gdzieś na newsgrupach. Możliwe, ale nie całkowicie "pewne". Zatem to ten człowiek jest Autorem - co wyraźnie tutaj podkreślam. Próbowałem też kilkukrotnie napisać do Autora list z prośbą o zgodę na publikację Kursu ze zmienioną treścią, ale żaden z moich maili nie trafił we właściwą skrzynkę. Próbowałem adresu podanego w oryginalnym wstępie oraz znalezionego w sieci, próbowałem nawiązać również kontakt przez GitHuba, gdzie istnieje konto euthoris i jest tam człowiek podpisany Sektor van Skijlen. Jak dotąd nie przyniosło to jeszcze wyników, ale będę jeszcze próbował.

Przytaczam tu jeszcze raz stopkę Kursu wstawioną przez Autora:

Wszelkie wnioski i uwagi nt. tej strony proszę kierować do mnie: ethouris@wp.pl. Jesli ktoś potrzebuje, to jest też dostępna wersja oryginalna, gdzie można znaleźć wersję spakowaną do przeglądania offline.

Jak widać - kursu już nie ma w oryginalnym miejscu (znaleziony został na www.intercom.pl/~sektor/cbx/), zatem uważam, że ocaliłem go od zapomnienia, wystawiając go na swojej stronie przez tyle lat.

Niniejszym przyznaję, że Kurs, kilkanaście lat temu tak mi się spodobał, że ściągnąłem go w całości do siebie, i wystawiłem na swojej stronie (bo Autor dopuścił takie pobieranie, udostępniając całą treść w wersji off-line). Kurs przeleżał następnie na mojej stronie przez ładnych kilkanaście lat, a teraz postanowiłem go odkopać, odświeżyć, i jednocześnie dostosować do nowszego standardu HTML. Oryginalnie DTD precyzowało wersję HTML dla kursu na zgodną z 4.0, ale koncepcyjnie i treściowo było to HTML sprzed czasów wersji 3.2. Przerobiłem zatem starannie całość, jadąc edytorem po treści (użyłem VIMa), i wywaliłem stare, śmieciowe kody typu <font color> i inne, zastępując je, zgodnie z obecnymi trendami, stylami CSS. Dzięki temu łatwiej określić wygląd całego Kursu i zapanować nad jego treścią w sensie wizualnym.

Mam nadzieję, że Autor nie miałby mi tego za złe, i że jeszcze wiele osób się z tego Kursu czegoś pożytecznego nauczy.