13
+ + C A I N O F M Y S D R A D N A T S Spis treœci 0 Proszê nie czytaæ tego ! ........................................................................1 1 Startujemy!..............................................................................................7 1.1 Pierwszy program................................................................................................................7 1.2 Drugi program ...................................................................................................................13 1.3 Æwiczenia ............................................................................................................................19 2 Instrukcje steruj¹ce .............................................................................22 2.1 Prawda – Fa³sz, czyli o warunkach .................................................................................22 2.1.1 Wyra¿enie logiczne ...................................................................................................... 22 2.1.2 Zmienne logiczne bool jako warunek......................................................................23 2.1.3 Stare dobre sposoby z dawnego C++ ........................................................................ 24 2.2 Instrukcja warunkowa if.................................................................................................25 2.3 Pêtla while ........................................................................................................................29 2.4 Pêtla do...while... .....................................................................................................30 2.5 Pêtla for .............................................................................................................................31 2.6 Instrukcja switch .............................................................................................................34 2.7 Co wybraæ: switch czy if...else? ............................................................................37 2.8 Instrukcja break ..............................................................................................................40 2.9 Instrukcja goto.................................................................................................................41 2.10 Instrukcja continue ...............................................................................................43 2.11 Klamry w instrukcjach steruj¹cych..................................................................................44 2.12 Æwiczenia ............................................................................................................................45 3 Typy .......................................................................................................48 3.1 Deklaracje typów ...............................................................................................................48 3.2 Systematyka typów z jêzyka C++.................................................................................... 50 3.3 Typy fundamentalne .........................................................................................................50 3.3.1 Definiowanie obiektów „w biegu“. ...........................................................................56 3.4 Sta³e dos³owne....................................................................................................................58 Spis treœci III

symf10 std pub - Instytut Fizyki Jądrowej PAN C N I F O Y M S R D D A A N S T Spis treœci 0 Proszê nie czytaæ tego ! .....1

Embed Size (px)

Citation preview

++C

AIN

OFM

YS

DR

AD

NA

TS

Spis treœci

0 Proszê nie czytaæ tego ! ........................................................................1

1 Startujemy!..............................................................................................71.1 Pierwszy program................................................................................................................71.2 Drugi program ...................................................................................................................131.3 Æwiczenia............................................................................................................................19

2 Instrukcje steruj¹ce .............................................................................222.1 Prawda – Fa³sz, czyli o warunkach .................................................................................222.1.1 Wyra¿enie logiczne......................................................................................................222.1.2 Zmienne logiczne bool jako warunek......................................................................232.1.3 Stare dobre sposoby z dawnego C++ ........................................................................242.2 Instrukcja warunkowa if.................................................................................................252.3 Pêtla while ........................................................................................................................292.4 Pêtla do...while... .....................................................................................................302.5 Pêtla for .............................................................................................................................312.6 Instrukcja switch .............................................................................................................342.7 Co wybraæ: switch czy if...else?............................................................................372.8 Instrukcja break ..............................................................................................................402.9 Instrukcja goto.................................................................................................................412.10 Instrukcja continue ...............................................................................................432.11 Klamry w instrukcjach steruj¹cych..................................................................................442.12 Æwiczenia............................................................................................................................45

3 Typy.......................................................................................................483.1 Deklaracje typów ...............................................................................................................483.2 Systematyka typów z jêzyka C++....................................................................................503.3 Typy fundamentalne .........................................................................................................503.3.1 Definiowanie obiektów „w biegu“. ...........................................................................563.4 Sta³e dos³owne....................................................................................................................58

Spis treœci III

++C

AIN

OFM

YS

DR

AD

NA

TS

3.4.1 Sta³e bêd¹ce liczbami ca³kowitymi ...........................................................................593.4.2 Sta³e reprezentuj¹ce liczby zmiennoprzecinkowe ..................................................613.4.3 Sta³e znakowe ...............................................................................................................623.4.4 Sta³e tekstowe, napisy, albo po prostu stringi ........................................................653.5 Typy z³o¿one ......................................................................................................................683.6 Typ void ............................................................................................................................703.7 Zakres wa¿noœci nazwy obiektu, a czas ¿ycia obiektu ...............................................703.7.1 Zakres: lokalny ............................................................................................................713.7.2 Zakres: blok funkcji......................................................................................................713.7.3 Zakres: obszar pliku.....................................................................................................723.7.4 Zakres: obszar klasy.....................................................................................................723.7.5 Zakres okreœlony przez przestrzeñ nazw .................................................................723.8 Zas³anianie nazw ...............................................................................................................783.9 Specyfikator (przydomek) const ...................................................................................803.9.1 Pojedynek: const con tra #de fine .......................................................................823.10 Obiekty register ............................................................................................................843.11 Specyfikator volatile ...................................................................................................843.12 Instrukcja typedef .........................................................................................................853.13 Typy wyliczeniowe enum ..............................................................................................873.14 Æwiczenia............................................................................................................................91

4 Operatory ..............................................................................................954.1 Operatory arytmetyczne ..................................................................................................954.1.1 Op er a tor %, czyli reszta z dzielenia (modulo) ........................................................964.1.2 Jednoargumentowe operatory + i - .........................................................................984.1.3 Operatory inkrementacji i dekrementacji ................................................................984.1.4 Op er a tor przypisania = ...........................................................................................1004.2 Operatory logiczne .........................................................................................................1014.2.1 Operatory relacji ........................................................................................................1014.2.2 Operatory sumy logicznej || i iloczynu logicznego && ....................................1034.2.3 Wykrzyknik ! – czyli op er a tor negacji .....................................................................1044.3 Operatory bitowe ..........................................................................................................1054.3.1 Przesuniêcie w lewo << ..........................................................................................1064.3.2 Przesuniêcie w prawo >> .......................................................................................1074.3.3 Bitowe operatory sumy, iloczynu, negacji, ró¿nicy symetrycznej .................1084.4 Ró¿nica miêdzy operatorami logicznymi, a operatorami bitowymi ......................1094.5 Pozosta³e operatory przypisania .................................................................................1104.6 Wyra¿enie warunkowe .................................................................................................1114.7 Operator sizeof ..........................................................................................................1134.8 Operatory rzutowania ...................................................................................................1144.8.1 Rzutowanie wed³ug tradycyjnych (nie zalecanych) sposobów ...........................1154.8.2 Rzutowanie za pomoc¹ nowych operatorów rzutowania ....................................1164.8.3 Op er a tor static_cast ...........................................................................................1174.8.4 Op er a tor const_cast..............................................................................................1194.8.5 Op er a tor dynamic_cast .........................................................................................1214.8.6 Op er a tor reinterpret_cast ...............................................................................121

IV Spis treœci

++C

AIN

OFM

YS

DR

AD

NA

TS

4.9 Operator: przecinek ......................................................................................................1234.10 Priorytety operatorów ...................................................................................................1234.11 £¹cznoœæ operatorów .....................................................................................................1264.12 Æwiczenia..........................................................................................................................127

5 Funkcje................................................................................................1325.1 Funkcja czêsto wywo³uje inn¹ funkcjê..........................................................................1355.2 Zwracanie rezultatu przez funkcjê ..............................................................................1365.3 Stos.....................................................................................................................................1405.4 Przesy³anie argumentów do funkcji przez wartoœæ ..................................................1405.5 Przesy³anie argumentów przez referencjê ................................................................1425.6 Kiedy deklaracja funkcji nie jest konieczna? ...............................................................1455.7 Argumenty domniemane ..............................................................................................1475.7.1 Ciekawostki na temat argumentów domniemanych ...........................................1505.8 Nienazwany argument ................................................................................................1565.9 Funkcje inline (w linii) ............................................................................................1575.10 Przypomnienie o zakresie wa¿noœci nazw deklarowanych wewn¹trz funkcji .....1615.11 Wybór zakresu wa¿noœci nazwy i czasu ¿ycia obiektu..............................................1625.11.1 Obiekty globalne .......................................................................................................1625.11.2 Obiekty automatyczne .............................................................................................1635.11.3 Obiekty lokalne statyczne ........................................................................................1645.12 Funkcje w programie sk³adaj¹cym siê z kilku plików ..............................................1685.12.1 Nazwy statyczne globalne .....................................................................................1735.13 Funkcje rekurencyjne ......................................................................................................1745.14 Funkcje biblioteczne ......................................................................................................1865.15 Æwiczenia..........................................................................................................................189

6 Preprocesor ........................................................................................1956.1 Na pomoc rodakom.........................................................................................................1956.2 Dyrektywa #define.......................................................................................................1976.3 Dyrektywa #undef .........................................................................................................2006.4 Makrodefinicje..................................................................................................................2006.5 Sklejacz nazw, czyli operator ## ...................................................................................2036.6 Zamiana parametru aktualnego makrodefinicji na string ........................................2046.7 Dyrektywy kompilacji warunkowej ............................................................................2056.8 Dyrektywa #error .........................................................................................................2106.9 Dyrektywa #line ...........................................................................................................2106.10 Wstawianie treœci innych plików w tekst kompilowanego w³aœnie pliku ...............2116.11 Dyrektywa pusta .............................................................................................................2136.12 Dyrektywy zale¿ne od implementacji .........................................................................2136.13 Nazwy predefiniowane...................................................................................................2146.14 Æwiczenia..........................................................................................................................216

7 Tablice.................................................................................................2197.1 Elementy tablicy...............................................................................................................2207.2 Inicjalizacja tablic ...........................................................................................................2237.3 Przekazywanie tablicy do funkcji ...............................................................................224

Spis treœci V

++C

AIN

OFM

YS

DR

AD

NA

TS

7.4 Przyk³ad z tablic¹ elementów typu enum.....................................................................2287.5 Tablice znakowe ..............................................................................................................2307.6 Tablice wielowymiarowe ..............................................................................................2407.6.1 Typ wyra¿eñ zwi¹zanych z tablic¹ wielowymiarow¹..........................................2437.6.2 Przesy³anie tablic wielowymiarowych do funkcji ................................................2457.7 Æwiczenia..........................................................................................................................247

8 WskaŸniki ............................................................................................2538.1 WskaŸniki mog¹ bardzo u³atwiæ ¿ycie .........................................................................2538.2 Definiowanie wskaŸników ...........................................................................................2558.3 Praca ze wskaŸnikiem ....................................................................................................2578.4 L–wartoœæ ..........................................................................................................................2608.5 Operator rzutowania reinterpret_cast, a wskaŸniki .........................................2618.6 WskaŸniki typu void ....................................................................................................2648.7 Cztery domeny zastosowania wskaŸników ...............................................................2678.8 Zastosowanie wskaŸników wobec tablic .....................................................................2678.8.1 Æwiczenia z mechaniki ruchu wskaŸnika ..............................................................2678.8.2 U¿ycie wskaŸnika w pracy z tablic¹........................................................................2728.8.3 Arytmetyka wskaŸników .........................................................................................2768.8.4 Porównywanie wskaŸników ..................................................................................2798.8.5 WskaŸnik mo¿na porównaæ z adresem 0 ..............................................................2818.9 Zastosowanie wskaŸników w argumentach funkcji .................................................2828.9.1 Jeszcze raz o przesy³aniu tablic do funkcji ..........................................................2868.9.2 Odbieranie tablicy jako wskaŸnika ..........................................................................2868.9.3 Ar gu ment formalny bêd¹cy wskaŸnikiem do obiektu const .......................2888.10 Zastosowanie wskaŸników przy dostêpie do konkretnych komórek pamiêci .......2928.11 Rezerwacja obszarów pamiêci ....................................................................................2938.11.1 Operatory new i de lete albo Oratorium Stworzenie Œwiata .........................2948.11.2 Dynamiczna alokacja tablicy .................................................................................2988.11.3 Tablice wielowymiarowe tworzone operatorem new ...........................................2998.11.4 Umiejscawiaj¹cy op er a tor new .................................................................................3018.11.5 "Przychodzimy, odchodzimy – cichuteñko, na..." .................................................3068.11.6 Zapas pamiêci to nie jest studnia bez dna .............................................................3098.11.7 Funkcja set_new_han dler ....................................................................................3138.11.8 Pojedynek: new con tra malloc ...............................................................................3158.12 Sta³e wskaŸniki .............................................................................................................3158.13 Sta³e wskaŸniki, a wskaŸniki do sta³ych .....................................................................3168.14 Strza³ na oœlep – WskaŸnik zawsze pokazuje na coœ .................................................3188.15 Sposoby ustawiania wskaŸników .................................................................................3198.16 Parada k³amców, czyli o rzutowaniu const_cast ...................................................3218.17 Tablice wskaŸników ......................................................................................................3268.18 Wariacje na temat C-stringów .......................................................................................3288.19 WskaŸniki do funkcji ....................................................................................................3378.19.1 Æwiczenia z definiowania wskaŸników do funkcji ..............................................3418.19.2 WskaŸnik do funkcji jako ar gu ment innej funkcji ...............................................3478.19.3 Tablica wskaŸników do funkcji ..............................................................................358

VI Spis treœci

++C

AIN

OFM

YS

DR

AD

NA

TS

8.20 Argumenty z linii wywo³ania programu ...................................................................3638.21 Æwiczenia..........................................................................................................................366

9 Prze³adowanie nazwy funkcji ...........................................................3749.1 Co to znaczy: prze³adowanie .........................................................................................3749.2 Bli¿sze szczegó³y prze³adowania ..................................................................................3789.3 Czy prze³adowanie nazw funkcji jest technik¹ obiektowo orientowan¹? .............3819.4 Linkowanie z modu³ami z innych jêzyków ................................................................3829.5 Prze³adowanie, a zakres wa¿noœci deklaracji funkcji ...............................................3839.6 Rozwa¿ania o identycznoœci lub odmiennoœci typów argumentów .......................3869.6.1 Prze³adowanie, a typedef i enum ........................................................................3869.6.2 Tablica, a wskaŸnik....................................................................................................3869.6.3 Pewne szczegó³y o tablicach wielowymiarowych ...............................................3889.6.4 Prze³adowanie, a referencja .....................................................................................3909.6.5 Identycznoœæ typów: T, const T, vol a tile T..............................................................3919.6.6 Prze³adowanie – a typy: T*, vol a tile T*, const T* ...................................................3929.6.7 Prze³adowanie – a typy: T&, vol a tile T&, const T&...............................................3949.7 Adres funkcji prze³adowanej .......................................................................................3949.7.1 Zwrot rezultatu bêd¹cego adresem funkcji prze³adowanej .................................3979.8 Kulisy dopasowywania argumentów do funkcji prze³adowanych ........................3989.9 Etapy dopasowania ........................................................................................................4009.9.1 Etap 1. Dopasowanie dok³adne................................................................................4019.9.2 Etap 1a. Dopasowanie dok³adne, ale z tzw. trywialn¹ konwersj¹ ....................4019.9.3 Etap 2. Dopasowanie z awansem (z promocj¹) .....................................................4029.9.4 Etap 3. Próba dopasowania za pomoc¹ konwersji standardowych ...................4059.9.5 Etap 4. Próba dopasowania z u¿yciem konwersji zdefiniowanych przezu¿ytkownika. ...............................................................................................................................4069.9.6 Etap 5. Próba dopasowania do funkcji z wielokropkiem ....................................4079.9.7 WskaŸników nie dopasowuje siê inaczej ni¿ dos³ownie ......................................4079.10 Dopasowywanie wywo³añ z kilkoma argumentami ..................................................4089.11 Æwiczenia..........................................................................................................................409

10Klasy....................................................................................................41210.1 Typy definiowane przez u¿ytkownika ........................................................................41210.2 Sk³adniki klasy ...............................................................................................................41410.3 Sk³adnik bêd¹cy obiektem .............................................................................................41610.4 Enkapsulacja ....................................................................................................................41610.5 Ukrywanie informacji .............................................................................................41810.6 Klasa, a obiekt ..................................................................................................................42110.7 Funkcje sk³adowe ............................................................................................................42410.7.1 Pos³ugiwanie siê funkcjami sk³adowymi................................................................42410.7.2 Definiowanie funkcji sk³adowych ...........................................................................42510.8 Jak to w³aœciwie jest ? (this) .......................................................................................43110.9 Odwo³anie siê do publicznych danych sk³adowych ..................................................43410.10 Zas³anianie nazw ...........................................................................................................43510.10.1 Nie siêgaj z klasy do obiektów globalnych.............................................................439

Spis treœci VII

++C

AIN

OFM

YS

DR

AD

NA

TS

10.11 Prze³adowanie i zas³oniêcie równoczeœnie ................................................................43910.12 Nowa klasa? Osobny plik! ..............................................................................................44010.13 Przesy³anie do funkcji argumentów bêd¹cych obiektami ........................................45210.13.1 Przesy³anie obiektu przez wartoœæ ..........................................................................45310.13.2 Przesy³anie przez referencjê ....................................................................................45510.14 Konstruktor – pierwsza wzmianka ..............................................................................45710.15 Destruktor – pierwsza wzmianka ................................................................................46210.16 Sk³adnik statyczny .........................................................................................................46510.16.1 Deklaracja sk³adnika statycznego po³¹czona z inicjalizacj¹ .................................47010.17 Statyczna funkcja sk³adowa ........................................................................................47610.18 Do czego mo¿e nam siê przydaæ sk³adnik statyczny w klasie? ...............................48010.19 Funkcje sk³adowe typu const oraz volatile ......................................................48010.19.1 Prze³adowanie, a funkcje sk³adowe const i vol a tile .................................48510.20 Specyfikator mutable ...................................................................................................48510.21 Æwiczenia..........................................................................................................................499

11Biblioteczna klasa std::string do operacji z tekstami ..............50311.1 Przyk³ad programu z u¿yciem klasy string .............................................................50511.2 Definiowanie obiektów klasy string..........................................................................51111.3 U¿ycie operatorów =, +, +=, w pracy ze stringami .....................................................51611.3.1 Jak umieœciæ w tekœcie liczbê?...................................................................................51711.4 Pojemnoœæ, rozmiar i d³ugoœæ stringu ..........................................................................51911.4.1 Funkcje size() i length() ...................................................................................51911.4.2 Funkcja sk³adowa empty..........................................................................................52011.4.3 Funkcja sk³adowa max_size...................................................................................52111.4.4 Funkcja sk³adowa capacity...................................................................................52111.4.5 Funkcja sk³adowa re serve ....................................................................................52311.4.6 resize – zmiana d³ugoœci stringu „na si³ê” .........................................................52411.4.7 Funkcja sk³adowa clear..........................................................................................52711.5 U¿ycie operatora [] oraz funkcji at ............................................................................52711.5.1 Dzia³anie operatora [] ............................................................................................52811.5.2 Dzia³anie funkcji sk³adowej at ................................................................................52911.6 Praca z fragmentem stringu, czyli z sub–stringiem ....................................................53211.7 Funkcja sk³adowa substr .............................................................................................53311.8 Szukanie zadanego substringu w obiekcie klasy string – funkcja find i jejpokrewne .....................................................................................................................................53411.9 Szukanie rozpoczynane od koñca stringu....................................................................53811.10 Szukanie w stringu jednego ze znaków z zadanego zestawu ..................................53911.11 Usuwanie znaków ze stringu – funkcje erase ...........................................................54211.12 Wstawianie znaków do ju¿ istniej¹cego stringu – funkcje insert .........................54411.13 Zamiana czêœci znaków na inne znaki – replace .....................................................54711.14 Zamiana zawartoœci obiektu klasy string na C-string ............................................55211.15 Zagl¹danie do wnêtrza obiektu klasy string funkcj¹ data ...................................55511.16 W porz¹dku alfabetycznym – czyli porównywanie stringów ..................................55711.16.1 Porównywanie stringów funkcjami com pare .......................................................55711.16.2 Porównywanie stringów przy u¿yciu operatorów ==, !=, <, >, <=, >=. ............563

VIII Spis treœci

++C

AIN

OFM

YS

DR

AD

NA

TS

11.17 Zamiana treœci stringu na ma³e (lub wielkie) litery.....................................................56511.18 Kopiowanie treœci obiektu klasy string do wybranej tablicy znakowej – funkcjacopy 57211.19 Wzajemna zamiana treœci dwóch obiektów klasy string – funkcja swap ............57311.20 Przypisanie do obiektu klasy string, funkcja assign............................................57311.21 Dopisywanie do koñca stringu za pomoc¹ funkcji append ......................................57611.22 Wczytywanie z klawiatury d³ugiego stringu o nieznanej wczeœniej d³ugoœci –getline.......................................................................................................................................57711.22.1 Pu³apka – czyli jak getline mo¿e Ciê zaskoczyæ................................................58111.23 Iteratory stringu ...............................................................................................................58611.23.1 Iterator do obiektu sta³ego ........................................................................................59011.23.2 Funkcje sk³adowe klasy string pracuj¹ce z iteratorami ....................................59211.24 Bryk – czyli "pamiêæ zewnêtrzna" programisty ..........................................................59911.25 Æwiczenia..........................................................................................................................608

12Deklaracje przyjaŸni...........................................................................61512.0.1 Klasy zaprzyjaŸnione ...............................................................................................62512.0.2 S³owo o zakresie .........................................................................................................628

13Struktury, Unie, Pola bitowe .............................................................62913.1 Struktura ...........................................................................................................................62913.2 Unia ...................................................................................................................................63013.2.1 Inicjalizacja unii ........................................................................................................63213.2.2 Unia anonimowa .......................................................................................................63313.3 Pola bitowe ......................................................................................................................63413.4 Unia i pola bitowe – upraszczaj¹ rozpakowanie s³ów................................................63913.5 Æwiczenia..........................................................................................................................647

14Klasa zagnie¿d¿ona lub lokalna ......................................................64914.1 Zagnie¿d¿ona definicja klasy.........................................................................................64914.2 Lokalna definicja klasy .................................................................................................65414.3 Lokalne nazwy typów ...................................................................................................65714.4 Æwiczenia..........................................................................................................................658

15Konstruktory i Destruktory .............................................................66015.1 Konstruktor ......................................................................................................................66015.1.1 Przyk³ad programu zawieraj¹cego klasê z konstruktorami.....................................66115.2 Specyfikator (przydomek) explicit ..........................................................................67515.3 Kiedy i jak wywo³ywany jest konstruktor....................................................................67515.3.1 Konstruowanie obiektów lokalnych .....................................................................67515.3.2 Konstruowanie obiektów globalnych ..................................................................67615.3.3 Konstrukcja obiektów tworzonych operatorem new ........................................67715.3.4 Jawne wywo³anie konstruktora ..............................................................................67815.3.5 Dalsze sytuacje, gdy pracuje konstruktor ...............................................................68015.4 Destruktor ......................................................................................................................68115.5 Konstruktor domniemany ............................................................................................68315.6 Lista inicjalizacyjna konstruktora .................................................................................68415.7 Konstrukcja obiektu, którego sk³adnikiem jest obiekt innej klasy .........................688

Spis treœci IX

++C

AIN

OFM

YS

DR

AD

NA

TS

15.8 Konstruktory nie-publiczne ? ........................................................................................69515.9 Konstruktor kopiuj¹cy (albo inicjalizator kopiuj¹cy) ................................................69715.9.1 Przyk³ad klasy z konstruktorem kopiuj¹cym ........................................................69915.9.2 Dlaczego przez referencjê?........................................................................................70615.9.3 Jak dostaæ pi¹tkê z C++ ? ..........................................................................................70715.9.4 Konstruktor kopiuj¹cy gwarantuj¹cy nietykalnoœæ ..............................................70915.9.5 Wspó³odpowiedzialnoœæ ...........................................................................................71015.9.6 Konstruktor kopiuj¹cy generowany automatycznie ............................................71015.9.7 Kiedy konstruktor kopiuj¹cy jest niezbêdny? ........................................................71115.10 Æwiczenia..........................................................................................................................717

16Tablice obiektów ...............................................................................72016.1 Tablica obiektów definiowana operatorem new .........................................................72216.2 Inicjalizacja tablic obiektów ..........................................................................................72416.2.1 Inicjalizacja tablic obiektów bêd¹cych agregatami ...............................................72416.2.2 Inicjalizacja tablic nie bêd¹cych agregatami...........................................................72816.2.3 Inicjalizacja tablic tworzonych w zapasie pamiêci ...............................................73216.3 Æwiczenia..........................................................................................................................733

17WskaŸnik do sk³adników klasy ........................................................73417.1 WskaŸniki zwyk³e – repetytorium ................................................................................73417.2 WskaŸnik do pokazywania na sk³adnik-dan¹ ............................................................73617.2.1 Przyk³ad zastosowania wskaŸników do sk³adników klasy .................................74017.3 WskaŸnik do funkcji sk³adowej ...................................................................................74717.3.1 Zastosowanie wskaŸników do funkcji sk³adowych ..............................................74917.4 Tablica wskaŸników do danych sk³adowych klasy ...................................................75617.5 Tablica wskaŸników do funkcji sk³adowych klasy ....................................................75717.6 WskaŸniki do sk³adników statycznych .......................................................................75817.7 Æwiczenia..........................................................................................................................759

18Konwersje ...........................................................................................76018.1 Sformu³owanie problemu ...............................................................................................76018.2 Konstruktory konwertuj¹ce ...........................................................................................76318.2.1 Kiedy jawnie, kiedy niejawnie .................................................................................76518.2.2 Przyk³ad konwersji konstruktorem .........................................................................77018.3 Funkcja konwertuj¹ca – operator konwersji ................................................................77218.3.1 Na co konwertowaæ nie mo¿na ................................................................................77818.4 Który wariant konwersji wybraæ ?.................................................................................77918.5 Sytuacje, w których zachodzi konwersja .....................................................................78118.6 Zapis jawnego wywo³ania konwersji typów .............................................................78218.6.1 Advocatus zapisu przypominaj¹cego: „wywo³anie funkcji“ ..............................78318.6.2 Advocatus zapisu: „rzutowanie“ ............................................................................78318.7 Nieca³kiem pasuj¹ce argumenty, czyli konwersje przy dopasowaniu ....................78418.8 Kilka rad dotycz¹cych konwersji...................................................................................78918.9 Æwiczenia..........................................................................................................................791

X Spis treœci

++C

AIN

OFM

YS

DR

AD

NA

TS

19Prze³adowanie operatorów ...............................................................79319.1 Prze³adowanie operatorów – definicja i trochê teorii .................................................79619.2 Moje zabawki ...................................................................................................................80019.3 Funkcja operatorowa jako funkcja sk³adowa ..............................................................80119.4 Funkcja operatorowa nie musi byæ przyjacielem klasy .............................................80519.5 Operatory predefiniowane ............................................................................................80619.6 Argumentowoœæ operatorów..........................................................................................80719.7 Operatory jednoargumentowe ......................................................................................80719.8 Operatory dwuargumentowe ......................................................................................81019.8.1 Przyk³ad na prze³adowanie operatora dwuargumentowego ..............................81119.8.2 Przemiennoœæ .............................................................................................................81219.8.3 Choæ operatory inne, to nazwê maj¹ tê sam¹ ........................................................81419.9 Przyk³ad zupe³nie nie matematyczny...........................................................................81419.10 Cztery operatory, które musz¹ byæ niestatycznymi funkcjami sk³adowymi...........82719.11 Operator przypisania = ..................................................................................................82719.11.1 Przyk³ad na prze³adowanie operatora przypisania .............................................83019.11.2 Jak koniecznoœæ istnienia operatora przypisania – opowiedzieæ potocznie? .....84019.11.3 Kiedy op er a tor przypisania nie jest generowany automatycznie ......................84219.12 Operator [ ] ....................................................................................................................84319.13 Operator ( ) ......................................................................................................................84819.14 Operator –> ......................................................................................................................85019.14.1 „Zrêczny wskaŸnik“ – wykorzystuje prze³adowanie w³aœnie tego operatora .85219.15 Operatory new, new[] ....................................................................................................85919.15.1 Przyk³ad prze³adowania operatora new .................................................................86019.15.2 Przyk³ad prze³adowania operatora new[] ............................................................86219.16 Operatory delete, delete[] ....................................................................................86319.16.1 Prosty przyk³ad prze³adowania de lete................................................................86419.16.2 Prosty przyk³ad prze³adowania de lete[] ...........................................................86519.17 Program przyk³adowy na zastosowanie operatorów new, delete.........................86519.18 Prze³adowanie globalnych operatorów new, new[], delete, delete[].............86919.19 Operatory postinkrementacji i postdekrementacji, czyli koniec zniesprawiedliwoœci¹ ...................................................................................................................87119.20 Rady praktyczne dotycz¹ce prze³adowania ................................................................87419.21 Pojedynek: Operator jako funkcja sk³adowa, czy globalna........................................87619.22 Zas³ona spada, czyli tajemnica operatora << .............................................................87819.23 Rzut oka wstecz ...............................................................................................................88419.24 Æwiczenia..........................................................................................................................886

20Dziedziczenie......................................................................................89020.1 Istota dziedziczenia .........................................................................................................89020.2 Dostêp do sk³adników ...................................................................................................89420.2.1 Prywatne sk³adniki klasy podstawowej..................................................................89420.2.2 Nieprywatne sk³adniki klasy podstawowej .........................................................89620.2.3 Klasa pochodna te¿ decyduje ...................................................................................89720.2.4 Deklaracja dostêpu us ing – czyli udostêpnianie wybiórcze ...........................89920.3 Czego siê nie dziedziczy.................................................................................................903

Spis treœci XI

++C

AIN

OFM

YS

DR

AD

NA

TS

20.3.1 "Nie dziedziczenie" konstruktorów ........................................................................90320.3.2 "Nie dziedziczenie" operatora przypisania .........................................................90420.3.3 "Nie dziedziczenie" destruktora ..............................................................................90420.4 Drzewo genealogiczne ....................................................................................................90520.5 Dziedziczenie – doskona³e narzêdzie programowania ..............................................90620.6 Kolejnoœæ wywo³ywania konstruktorów .....................................................................90920.7 Przypisanie i inicjalizacja obiektów w warunkach dziedziczenia ..........................91520.7.1 Klasa pochodna nie definiuje swojego operatora przypisania.............................91520.7.2 Klasa pochodna nie definiuje swojego konstruktora kopiuj¹cego ......................91720.7.3 Inicjalizacja i przypisywanie wed³ug obiektu wzorcowego bêd¹cego const ..91720.7.4 Definiowanie konstruktora kopiuj¹cego i operatora przypisania dla klasypochodnej ...................................................................................................................................91820.8 Dziedziczenie od kilku "rodziców" (czyli wielokrotne) .............................................92520.8.1 Konstruktor klasy pochodnej przy wielokrotnym dziedziczeniu ......................92720.8.2 Ryzyko wieloznacznoœci przy dziedziczeniu .......................................................92920.8.3 Bli¿sze pokrewieñstwo usuwa wieloznacznoœæ.....................................................93220.8.4 Poszlaki........................................................................................................................93220.9 Pojedynek: Dziedziczenie klasy, contra zawieranie obiektów sk³adowych ............93320.10 Konwersje standardowe przy dziedziczeniu ..........................................................93520.10.1 Pan orama korzyœci.....................................................................................................94020.10.2 Czego robiæ siê nie op³aca .......................................................................................94320.10.3 Tuzin samochodów nie jest rodzajem tuzina pojazdów.......................................94420.10.4 Konwersje standardowe wskaŸnika do sk³adnika klasy .....................................94920.11 Wirtualne klasy podstawowe .....................................................................................95120.11.1 Publiczne i prywatne dziedziczenie tej samej klasy wirtualnej...........................95520.11.2 Uwagi o konstrukcji i inicjalizacji w przypadku klas wirtualnych ....................95620.11.3 Dominacja klas wirtualnych ...................................................................................96020.12 Æwiczenia..........................................................................................................................961

21Funkcje wirtualne...............................................................................96821.1 Polimorfizm .....................................................................................................................97521.2 Typy rezultatów ró¿nych realizacji funkcji wirtualnej ...............................................97921.3 Dalsze szczegó³y ..............................................................................................................98221.4 Wczesne i póŸne wi¹zanie ............................................................................................98421.5 Kiedy dla wywo³añ funkcji wirtualnych, mimo wszystko, zachodzi wczesnewi¹zanie? ...................................................................................................................................98621.6 Kulisy bia³ej magii, czyli: Jak to jest zrobione ? ...........................................................98821.7 Funkcja wirtualna, a mimo to inline .....................................................................98921.8 Pojedynek – funkcje prze³adowane contra funkcje wirtualne ................................99021.9 Klasy abstrakcyjne .........................................................................................................99221.10 Destruktor? to najlepiej wirtualny! ...............................................................................99921.11 Co prawda, konstruktor nie mo¿e byæ wirtualny, ale... ..........................................100421.12 Rzutowanie dynamic_cast jest dla typów polimorficznych ................................101121.13 Wszystko, co najwa¿niejsze..........................................................................................101521.14 Finis coronat opus..........................................................................................................101721.15 Æwiczenia........................................................................................................................1018

XII Spis treœci

++C

AIN

OFM

YS

DR

AD

NA

TS

22Operacje Wejœcia/Wyjœcia...............................................................102122.1 Biblioteka iostream ........................................................................................................102222.2 Strumieñ .........................................................................................................................102322.3 Strumienie zdefiniowane standardowo ...................................................................102522.4 Operatory >> i << ........................................................................................................102622.5 Domniemania w pracy strumieni zdefiniowanych standardowo ..........................102722.6 Uwaga na priorytet .......................................................................................................103122.7 Operatory << oraz >> definiowane przez u¿ytkownika ........................................103222.7.1 Operatorów wstawiania i wyjmowania ze strumienia – nie dziedziczy siê ...103822.7.2 Operatory wstawiania i wyjmowania nie mog¹ byæ wirtualne. Niestety. ......103922.8 Sterowanie formatem ..................................................................................................104122.9 Flagi stanu formatowania ..........................................................................................104122.9.1 Znaczenie poszczególnych flag sterowania formatem .....................................104422.10 Sposoby zmiany trybu (regu³) formatowania ............................................................105022.10.1 Zmiana sposobu formatowania funkcjami setf, unsetf ...........................105222.10.2 Dodatkowe funkcje do zmiany parametrów formatowania ..............................105722.11 Manipulatory .................................................................................................................106522.11.1 Ma nip u la tory bezargumentowe ............................................................................106622.11.2 Ma nip u la tory parametryzowane ..........................................................................107222.11.3 Definiowanie swoich manipulatorów ..................................................................107622.11.4 Ma nip u la tor jako funkcja ........................................................................................107722.11.5 Definiowane manipulatora z parametrem............................................................107922.12 Nieformatowane operacje wejœcia/wyjœcia ..............................................................108322.13 Omówienie funkcji wyjmuj¹cych ze strumienia........................................................108622.13.1 Funkcje do pracy ze znakami i stringami .............................................................108622.13.2 Wczytywanie binarne – funkcje read i readsome ..........................................109322.13.3 Funkcja ignore .....................................................................................................109522.13.4 Po¿yteczne funkcje pomocnicze.............................................................................109622.13.5 Funkcje wstawiaj¹ce do strumienia .......................................................................109922.14 Strumienie p³yn¹ce do lub od plików ........................................................................110222.14.1 Otwieranie i zamykanie strumienia ....................................................110422.15 B³êdy w trakcie pracy strumienia ..............................................................................111022.15.1 Flagi stanu b³êdu strumienia .........................................................................111122.15.2 Funkcje do pracy na flagach b³êdu ........................................................................111222.15.3 Kilka udogodnieñ.....................................................................................................111322.15.4 Ustawianie i kasowanie flag b³êdu strumienia ....................................................111522.15.5 Trzy plagi – czyli „gotowiec”, jak radziæ sobie z b³êdami..................................111922.16 Przyk³ad programu pracuj¹cego na plikach ..............................................................112322.17 Strumienie, a technika rzucania wyj¹tków ................................................................112622.18 Wybór miejsca czytania lub pisania w pliku .............................................................113022.18.1 Funkcje sk³adowe informuj¹ce o pozycji wskaŸników.......................................113222.18.2 Wybrane funkcje sk³adowe do pozycjonowania wskaŸników .......................113222.19 Pozycjonowanie w przyk³adzie wiêkszego programu ............................................113622.20 Tie – harmonijna praca dwóch strumieni ...................................................................114322.21 Dlaczego tak nie lubimy biblioteki stdio? .............................................................1145

Spis treœci XIII

++C

AIN

OFM

YS

DR

AD

NA

TS

22.22 Synchronizacja biblioteki iostream z bibliotek¹ stdio ........................................114822.23 Strumieñ zapisuj¹cy do obiektu klasy string .........................................................115022.23.1 Pro gram przyk³adowy ilustruj¹cy u¿ycie klasy ostringstream ..................115522.24 Strumieñ czytaj¹cy z obiektu klasy string ..............................................................115922.24.1 Prosty przyk³ad u¿ycia strumienia istringstream................................................116122.24.2 Wczytywanie argumentów wywo³ywania programu ........................................116722.25 O¿enek: strumieñ stringstream – czytaj¹cy i zapisuj¹cy do stringu ................117022.25.1 Przyk³adowy pro gram pos³uguj¹cy siê klas¹ stringstream .........................117222.26 Æwiczenia........................................................................................................................1174

23Projektowanie programów orientowanych obiektowo.................118223.1 Przegl¹d kilku technik programowania .....................................................................118323.1.1 Programowanie liniowe ........................................................................................118323.1.2 Programowanie proceduralne (czyli "orientowane funkcyjnie") .....................118323.1.3 Programowanie z ukrywaniem danych ..............................................................118423.1.4 Programowanie obiektowe – programowanie „bazuj¹ce“ na obiektach .........118423.1.5 Programowanie Obiektowo Orientowane (OO) ................................................118523.2 O wy¿szoœci programowania obiektowo orientowanego nad Œwiêtami WielkiejNocy ..........................................................................................................................................118623.3 Obiektowo Orientowane: Projektowanie ...................................................................118923.4 Praktyczne wskazówki dotycz¹ce projektowania programu technik¹ OO...........119023.4.1 Rekonesans – czyli rozpoznanie zagadnienia ......................................................119123.4.2 Faza projektowania ..................................................................................................119223.4.3 Etap 1: Identyfikacja zachowañ systemu ..............................................................119323.4.4 Etap 2: Identyfikacja obiektów (klas obiektów) ...................................................119323.4.5 Etap 3: Usystematyzowanie klas obiektów...........................................................119523.4.6 Etap 4: Okreœlenie wzajemnych zale¿noœci klas ..................................................119723.4.7 Etap 5: Sk³adanie modelu. Okreœlanie sekwencji dzia³añ obiektów i cykli¿yciowych ...............................................................................................................................119923.5 Faza implementacji ........................................................................................................120023.6 Przyk³ad projektowania................................................................................................120123.7 Faza: Rozpoznanie naszego zagadnienia ...................................................................120123.8 Faza: Projektowanie.......................................................................................................120523.8.1 Etap 1 – Identyfikacja zachowañ naszego systemu.............................................120523.8.2 Etap 2 – Identyfikacja klas obiektów, z którymi mamy do czynienia...............120623.8.3 Etap 3 – Usystematyzowanie klas obiektów z wystêpuj¹cych w naszym systemie121023.8.4 Etap 4 – Okreœlenie wzajemnych zale¿noœci klas ..............................................121123.8.5 Etap 5 – Sk³adamy model naszego systemu.........................................................121423.9 Implementacja modelu naszego systemu...................................................................121823.10 Symfonia C++, Coda .....................................................................................................122523.11 Pos³owie ..........................................................................................................................1226

A Dodatek: Systemy liczenia .............................................................1228A.1 Dlaczego komputer nie liczy tak jak my?...................................................................1228A.2 System szesnastkowy (heksadecymalny) ...................................................................1234

XIV Spis treœci

++C

AIN

OFM

YS

DR

AD

NA

TS

A.3 Æwiczenia........................................................................................................................1237

Skorowidz .........................................................................................1239

Spis treœci XV