Sadržaj

(kliknite mišem na naslove pojedinih poglavlja da se prikaže sadržaj)

piramidica 1. To C++ or not to C++? ... 1

1.1. Povijesni pregled razvoja programskih jezika ... 1

1.2. Osnovna svojstva jezika C++ ... 3

1.3. Usporedba s C-om ... 6

1.4. Usporedba s Javom ... 9

1.4.1. Java je potpuno objektno orijentirani programski jezik ... 9

1.4.2. Java izvedbeni kôd može se izvoditi na bilo kojem računalu ... 9

1.4.3. Java nema pokazivača ... 10

1.4.4. Java nema višestrukog nasljeđivanja ... 11

1.4.5. Java ima ugrađeni sustav za automatsko upravljanjem memorijom ... 11

1.4.7. Java ne podržava preopterećenje operatora ... 12

1.4.8. U Javi su operacije s decimalnim brojevima lošije podržane ... 12

1.4.9. Java ima na raspolaganju ogromnu biblioteku klasa ... 12

1.4.10. Java je jezik u “vlasništvu” jedne tvrtke ... 13

1.5. Usporedba s jezikom C♯ ... 13

1.6. Ima li smisla učiti jezik C++? ... 13

1.7. Zašto primjer iz knjige ne radi na mom računalu? ... 14

1.8. Literatura ... 15

1.9. Zahvale ... 16

1.9.1. Zahvale uz drugo i treće izdanje ... 16

piramidica 2. Vrijeme je da se krene... 17

2.1. Što je program i kako ga napisati ... 17

2.2. Boj ne bije svjetlo oružje, već srce u junaka ... 21

2.2.1. Integrirana razvojna okolina ... 21

2.2.2. Prevoditelj i povezivač ... 22

2.2.3. Program za uređivanje teksta ... 22

2.2.4. Program za otkrivanje pogrešaka ... 22

2.3. Moj prvi i drugi C++ program ... 22

2.4. Moj treći C++ program ... 30

2.5. Komentari ... 32

2.6. Rastavljanje naredbi ... 35

2.7. Upravljanje slijedom izvođenja programa ... 37

2.8. Korisnički definirani tipovi ... 40

piramidica 3. Osnovni tipovi podataka ... 45

3.1. Identifikatori ... 45

3.2. Varijable, objekti i tipovi ... 48

3.2.1. Deklaracija ... 48

3.2.2. Inicijalizacija ... 49

3.2.3. Neinicijalizirane varijable ... 52

3.3. Operator pridruživanja ... 53

3.4. Tipovi podataka i operatori ... 55

3.4.1. Brojevi ... 55

3.4.2. Aritmetički operatori ... 63

3.4.3. Operator dodjele tipa ... 70

3.4.4. Dodjeljivanje tipa brojčanim konstantama ... 72

3.4.5. Simboličke konstante ... 73

3.4.6. Konstante definirane konstantnim izrazima ... 75

3.4.7. Kvalifikator volatile ... 76

3.4.8. Logički tipovi i operatori ... 77

3.4.9. Poredbeni operatori ... 79

3.4.10. Znakovi ... 81

3.4.11. Operatori pridruživanja (2 ½) ... 86

3.4.12. Alternativne oznake operatora ... 87

3.4.13. Deklaracija auto i operator decltype ... 88

3.4.14. Korisnički definirani tipovi i operatori ... 90

3.4.15. Pseudonimi tipova ... 91

3.5. Operator sizeof ... 93

3.6. Operator razdvajanja ... 94

3.7. Hijerarhija i redoslijed izvođenja operatora ... 95

piramidica 3. Naredbe za kontrolu toka programa ... 101

4.1. Blokovi naredbi ... 101

4.2. Naredbe za grananje toka ... 103

4.2.1. Naredba if ... 103

4.2.2. Uvjetni operator ? : ... 110

4.2.3. Naredba switch ... 111

4.3. Naredbe za ponavljanje ... 119

4.3.1. Petlja for ... 119

4.3.2. Naredba while ... 126

4.3.3. Blok do-while ... 129

4.3.4. Slijedna naredba for ... 134

4.3.5. Naredbe za prekid petlje ... 135

4.4. Naredbe za bacanje i obradu iznimki ... 139

4.4.1. Bacanje iznimke ... 139

4.4.2. Hvatanje i obrada iznimke ... 141

4.5. Ostale naredbe za skok ... 147

4.6. O strukturiranju izvornog kôda ... 148

4.7. Kutak za buduće C++ „gurue” ... 150

piramidica 5. Nizovi podataka ... 155

5.1. Ugrađeni nizovi podataka ... 155

5.1.1. Jednodimenzionalni nizovi ... 155

5.1.2. Dvodimenzionalni nizovi ... 163

5.2. Znakovni nizovi ... 170

5.2.1. Sirovi nizovi ... 173

5.2.2. Kodiranja znakovnih nizova ... 175

5.3. Spremnici ... 177

5.3.1. Klasa vector ... 178

5.3.2. Klasa string ... 182

5.4. Iteratori ... 188

piramidica 6. Pokazivači i reference ... 191

6.1. Pokazivači ... 191

6.1.1. Koja korist od pokazivača ako samo izazivaju probleme? ... 197

6.1.2. Nul-pokazivači ... 199

6.1.3. Kamo sa zvijezdom (petokrakom) ... 205

6.1.4. Tajna veza između pokazivača i nizova ... 206

6.1.5. Nepromjenjivi znakovni nizovi ... 209

6.1.6. Nizovi znakovnih nizova ... 210

6.1.7. Aritmetičke operacije s pokazivačima ... 212

6.1.8. Nepromjenjivi pokazivači i pokazivači na nepromjenjive objekte ... 216

6.2. Reference ... 219

6.3. Razlika između referenci i pokazivača ... 222

6.4. Dinamička alokacija objekata ... 225

6.4.1. Dinamička alokacija nepromjenjivih objekata ... 228

piramidica 7. Jednostavni korisnički definirani tipovi ... 229

7.1. Pobrojenja ... 229

7.1.1. Pobrojenja neograničenog dosega ... 232

7.2. Strukture ... 233

7.2.1. Definicija strukture ... 233

7.2.2. Inicijalizacija i dohvaćanje članova ... 235

7.2.3. Bezimene strukture ... 238

7.2.4. Ugniježđene strukture ... 238

7.3. Unije ... 240

7.3.1. Bezimene i anonimne unije ... 243

7.3.2. Program za izračunavanje izraza ... 244

7.4. Rukovanje pojedinačnim bitovima ... 248

7.4.1. Bitovni operatori ... 248

7.4.2. Polja bitova ... 255

piramidica 8. Funkcije ... 257

8.1. Što su i zašto koristiti funkcije ... 257

8.2. Deklaracija i definicija funkcije ... 259

8.2.1. Deklaracije funkcija u datotekama zaglavlja ... 262

8.3. Tip funkcije ... 265

8.3.1. Automatsko određivanje povratnog tipa ... 268

8.4. Lista argumenata ... 268

8.4.1. Funkcije bez argumenata ... 268

8.4.2. Prijenos argumenata po vrijednosti ... 269

8.4.3. Referenca kao argument ... 272

8.4.4. Pokazivač kao argument ... 275

8.4.5. Konstantni argumenti ... 278

8.4.6. Promjena pokazivača unutar funkcije ... 281

8.4.7. Ugrađeni nizovi kao argumenti ... 287

8.4.8. Podrazumijevani argumenti ... 292

8.4.9. Funkcije s promjenjivim brojem argumenata ... 295

8.5. Pokazivači i reference kao povratne vrijednosti ... 300

8.6. void* kao argument i povratna vrijednost funkcije ... 305

8.7. Dojava pogreške u funkciji ... 307

8.8. Život jednog objekta ... 311

8.8.1. Lokalni objekti ... 311

8.8.2. Globalni objekti ... 312

8.8.3. Statički objekti u funkcijama ... 316

8.9. Umetnute funkcije ... 318

8.10. Preopterećenje funkcija ... 319

8.11. Rekurzija ... 326

8.12. Funkcije kao konstantni izrazi ... 328

8.13. Pokazivači na funkcije ... 331

8.14. Funkcija main() ... 338

8.15. Standardne funkcije ... 341

8.15.1. Funkcije za rukovanje znakovnim nizovima ... 343

8.15.2. Funkcija exit() ... 348

8.16. Predlošci funkcija ... 349

8.16.1. Prateća deklaracija povratnog tipa ... 352

8.17. Pogled na funkcije „ispod haube” ... 354

8.18. Kako pisati funkcionalne funkcije ... 356

8.18.1. Funkcije doprinose modularnosti i olakšavaju testiranje ... 356

8.18.2. Ova funkcija sadrži samo n-naredbi ... 357

8.18.3. Izbjegavati preduboka i nepotrebna gniježđenja ... 357

8.18.4. Koristiti već provjerene funkcije ... 360

8.18.5. Imena funkcije i argumenata ... 360

8.18.6. Argumenti i povratna vrijednost ... 361

8.18.7. Provjera argumenata i signalizacija pogreške ... 361

8.18.8. Princip dizajna prema ugovoru ... 362

8.18.9. Koristiti automatizirane testove za provjeru ispravnosti ... 365

8.18.10. Program za izračunavanje izraza 2 ... 366

piramidica 9. Klase i objekti ... 373

9.1. Kako prepoznati klase? ... 373

9.2. Definicija klase ... 377

9.2.1. Podatkovni članovi ... 378

9.2.2. Dohvaćanje članova ... 379

9.2.3. Funkcijski članovi ... 381

9.2.4. Ključna riječ this ... 384

9.2.5. Umetnuti funkcijski članovi ... 386

9.2.6. Dodjela prava pristupa ... 387

9.2.7. Formiranje javnog sučelja korištenjem prava pristupa ... 390

9.2.8. Prijatelji klase ... 391

9.3. Deklaracija objekata klase ... 394

9.4. Stvaranje i uništavanje objekata ... 395

9.4.1. Konstruktor ... 395

9.4.2. Inicijalizacija dinamičkih članova ... 400

9.4.3. Delegiranje konstruktora ... 403

9.4.4. Redoslijed inicijalizacije članova ... 404

9.4.5. Inicijalizacija članova unutar definicije klase ... 406

9.4.6. Podrazumijevani konstruktor ... 409

9.4.7. Poziv konstruktora prilikom definiranja objekata ... 411

9.4.8. Konstruktor kopije ... 412

9.4.10. Konstruktor zadan konstantnim izrazom ... 417

9.4.11. Inicijalizacija referenci i konstantnih članova ... 418

9.4.12. Destruktor ... 420

9.4.13. Specijalni funkcijski članovi klase ... 423

9.4.14. Prava pristupa konstruktoru i destruktoru ... 424

9.4.15. Iznimke u konstruktoru i destruktoru ... 428

9.4.16. Globalni i statički objekti ... 429

9.5. Nizovi objekata ... 431

9.6. Konstantni funkcijski članovi ... 432

9.7. Funkcijski članovi deklarirani kao volatile ... 438

9.8. Statički članovi klase ... 439

9.8.1. Statički podatkovni članovi ... 439

9.8.2. Statički funkcijski članovi ... 444

9.9. Područje klase ... 446

9.9.1. Razlučivanje područja ... 448

9.10. Ugniježđene klase ... 450

9.11. Lokalne klase ... 454

9.12. Pokazivači na članove klase ... 455

9.12.1. Pokazivači na podatkovne članove ... 457

9.12.2. Pokazivači na funkcijske članove ... 460

9.13. Privremeni objekti ... 465

9.13.1. Eksplicitno stvoreni privremeni objekti ... 465

9.13.2. Privremeni objekti kod prijenosa argumenata u funkciju... 470

9.13.3. Privremeni objekti kod vraćanja vrijednosti ... 473

9.13.4. Konstruktor pomaka ... 478

9.14. Novi pogled na strukture i unije ... 482

9.14.1. Jesu li strukture isto što i klase? ... 482

9.14.2. Unije na speedu ... 483

9.15. Zašto moja klasa ne odlazi u raj? ... 485

9.15.1. Klasa nije struktura koja samo objedinjuje podatke ... 485

9.15.2. Jasno razdvojiti sučelje od implementacije ... 485

9.15.3. Klasa mora imati točno određeno područje odgovornosti ... 486

9.15.4. Voditi računa o skrivanju podataka ... 487

9.15.5. Izbjegavati (ne)prijatelje ... 487

9.15.6. Minimalno sučelje ... 487

9.15.7. Mjerila kvalitete apstrakcije ... 487

piramidica 10. Nasljeđivanje i hijerarhija klasa ... 489

10.1. Ima li klasa bogatog strica u Ameriki? ... 489

10.2. Specificiranje nasljeđivanja ... 494

10.3. Pristup naslijeđenim članovima ... 501

10.4. Nasljeđivanje i prava pristupa ... 504

10.4.1. Zaštićeno pravo pristupa ... 504

10.4.2. Javne osnovne klase ... 505

10.4.3. Privatne osnovne klase ... 508

10.4.4. Zaštićene osnovne klase... 510

10.4.5. Posebne napomene o pravima pristupa ... 512

10.4.6. Uključivanje članova bazne klase ... 514

10.5. Nasljeđivanje i pripadnost ... 517

10.6. Inicijalizacija i uništavanje izvedenih klasa ... 519

10.7. Standardne pretvorbe i nasljeđivanje ... 523

10.8. Područje klase i nasljeđivanje ... 527

10.8.1. Razlika nasljeđivanja i preopterećenja ... 528

10.8.2. Ugniježđene klase i nasljeđivanje ... 528

10.9. Klase kao argumenti funkcija ... 530

10.9.1. Točno podudaranje tipova... 531

10.9.2. Standardne pretvorbe ... 531

10.9.3. Korisnički definirane pretvorbe ... 533

10.10. Principi polimorfizma ... 535

10.10.1. Virtualni funkcijski članovi ... 539

10.10.2. Poziv virtualnih funkcijskih članova ... 544

10.10.3. Čiste virtualne funkcije ... 547

10.10.4. Virtualni destruktori ... 548

10.10.5. Opuštanje povratnog tipa virtualnih funkcija ... 550

10.11. Onemogućavanje nasljeđivanja ... 552

10.12. Virtualne osnovne klase ... 553

10.12.1. Deklaracija virtualnih osnovnih klasa ... 555

10.12.2. Pristup članovima virtualnih osnovnih klasa ... 556

10.12.3. Inicijalizacija osnovnih virtualnih klasa ... 558

10.13. Kako dobro iskoristiti nasljedstvo ... 560

10.13.1. Nasljeđivati ili ne nasljeđivati? ... 560

10.13.2. Nasljeđivanje koristiti na ispravan način ... 570

10.13.3. Formiranje hijerarhije nasljeđivanja ... 570

10.13.4. Korištenje poliformizma i virtualni funkcijski članovi ... 571

10.13.5. Zaštita podatkovnih članova ... 573

piramidica 11. Dinamička alokacija objekata ... 575

11.1. Zašto treba izbjegavati dinamičku alokaciju ... 575

11.1.1. Razlika između automatske i dinamičke alokacije ... 575

11.1.2. Što učiniti kada alokacija ne uspije ... 579

11.1.3. Problemi vezani uz nepravilnu dealokaciju ... 582

11.1.4. Vlasništvo nad pokazivačem ... 586

11.2. Pametni pokazivači ... 586

11.2.1. Pokazivač unique_ptr ... 587

11.2.2. Pokazivač shared_ptr ... 593

11.2.3. Pokazivač weak_ptr ... 595

11.3. Dinamička alokacija ugrađenih nizova ... 598

11.3.1. Dinamička alokacija niza ... 598

11.3.2. Dinamička alokacija višedimenzionalnih nizova ... 600

11.3.3. Pokazivači na pokazivače ... 601

11.4. Smještajni operator new ... 603

piramidica 12. Predlošci funkcija i klasa ... 605

12.1. Uporabna vrijednost predložaka ... 605

12.2. Predlošci funkcija ... 607

12.2.1. Definicija predloška funkcije ... 607

12.2.2. Parametri predloška funkcije ... 610

12.2.3. Instantacija predloška funkcije ... 613

12.2.5. Preopterećivanje predložaka funkcija ... 620

12.2.6. Specijalizacije predložaka funkcija ... 621

12.2.7. Predlošci s promjenjivim brojem parametara ... 622

12.2.8. Primjer predloška funkcije za bubble sort ... 626

12.3. Predlošci klasa ... 627

12.3.1. Definicija predloška klase... 628

12.3.2. Instantacija predloška klase ... 632

12.3.3. Eksplicitna instantacija predloška klase ... 635

12.3.4. Specijalizacija predloška klase ... 637

12.3.5. Djelomična specijalizacija klase ... 639

12.3.6. Predlošci klasa sa statičkim članovima ... 644

12.3.7. Ne-tipski parametri predložaka ... 646

12.3.8. Predlošci klasa s promjenjivim brojem parametara ... 647

12.3.9. Predlošci i ugniježđeni tipovi ... 649

12.3.10. Ugniježđeni predlošci ... 650

12.3.11. Predlošci i prijatelji klase ... 652

12.3.12. Predlošci i nasljeđivanje ... 656

12.3.13. Predlošci klasa i polimorfizam ... 658

12.4. Realizacija klase Lista predloškom ... 664

12.5. Par i n-torka ... 667

12.6. Metaprogramiranje predlošcima ... 669

12.7. Zaključak o predlošcima ... 673

piramidica 13. Slijedni spremnici ... 675

13.1. Standardna biblioteka predložaka od stoljeća Sedmog ... 675

13.2. Struktura biblioteke ... 675

13.3. Spremnici ... 676

13.3.1. Vektor ... 678

13.3.2. Dvostrani red ... 685

13.3.3. Dvostruko vezana lista ... 685

13.3.4. Jednostruko vezana lista ... 687

13.3.5. Niz ... 687

13.4. Iteratori ... 687

13.4.1. Koji je smisao iteratora ... 687

13.4.2. Opća svojstva iteratora ... 691

13.4.3. Operacije nad iteratorima ... 693

13.5. Par napomena o elementima spremnika ... 699

13.6. A dobitnik Oskara za najbolji spremnik je ... ... 701

piramidica 14. Standardni algoritmi ... 703

14.1. Kako su algoritmi definirani ... 703

14.1.1. Kako napisati generički algoritam ... 703

14.1.2. Podjela algoritama u standardnoj biblioteci ... 706

14.1.3. Operacije koje ne mijenjaju sljedove ... 706

14.1.4. Operacije koje mijenjaju sljedove ... 707

14.1.5. Operacije sortiranja ... 711

14.1.6. Algoritmi naslijeđeni iz jezika C ... 713

14.2. Funkcijski objekti ... 714

14.2.1. Što su funkcijski objekti ... 714

14.2.2. Predikati ... 717

14.2.3. Aritmetički funkcijski objekti ... 719

14.2.4. Funkcijski adapteri i veznici... 720

14.3. Lambda izrazi ... 723

piramidica 15. Posebni spremnici ... 729

15.1. Asocijativni spremnici ... 729

15.1.1. Mapa ... 730

15.1.2. Višestruka mapa ... 736

15.1.3. Skup i višestruki skup ... 738

15.1.4. Razlike između uređenih i neuređenih spremnika ... 741

15.2. Spremnički adapteri ... 743

15.2.1. Stôg ... 744

15.2.2. Red ... 745

15.2.3. Prioritetni red ... 746

15.2.4. Skup bitova ... 747

piramidica 16. Rukovanje iznimkama ... 751

16.1. Što su iznimke? ... 751

16.2. Blokovi pokušaja i hvatanja iznimki ... 755

16.2.1. Bacanje iznimke ... 755

16.2.2. Blok hvatanja ... 757

16.3. Tijek obrade iznimki ... 758

16.4. Prosljeđivanje iznimke ... 763

16.5. Argument bloka hvatanja ... 764

16.5.1. Hvatanje srodnih iznimki ... 765

16.5.2. Reference i pokazivači kao objekti iznimki ... 768

16.6. Oslobađanje dinamički alocirane memorije ... 770

16.7. Specifikacija iznimki u funkciji ... 773

16.8. Iznimke kod dinamičke alokacije memorije ... 775

16.9. Iznimke u konstruktoru ... 778

16.10. Standardizirane iznimke ... 781

piramidica 17. Identifikacija tipa tijekom izvođenja ... 785

17.1. Statički i dinamički tipovi ... 785

17.2. Operator typeid ... 787

17.3. Sigurna pretvorba ... 791

17.4. Ostali operatori pretvorbe ... 795

17.4.1. Promjena konstantnosti objekta ... 795

17.4.2. Statičke dodjele tipa ... 795

piramidica 18. Preopterećenje operatora ... 799

18.1. Korisnički definirane pretvorbe ... 799

18.1.1. Pretvorba konstruktorom ... 800

18.1.2. Eksplicitni konstruktori ... 802

18.1.3. Operatori pretvorbe ... 805

18.1.4. Eksplicitni operatori pretvorbe ... 810

18.2. Osnove preopterećenja operatora ... 811

18.3. Definicija operatorske funkcije ... 813

18.3.1. Operatori usporedbe ... 817

18.3.2. Operator = ... 823

18.3.3. Operator [] ... 826

18.3.4. Operator () ... 830

18.3.5. Operator -> ... 831

18.3.6. Prefiks i postfiks operatori ++ i -- ... 834

18.3.7. Operatori new i delete ... 839

18.4. Nasljeđivanje preopterećenih operatora ... 847

18.4.1. Usporedba objekata u hijerarhiji ... 851

18.5. Opće napomene o preopterećenju operatora ... 853

piramidica 19. Imenici ... 857

19.1. Problem područja imena ... 857

19.2. Definicija imenika ... 858

19.2.1. Ugniježđeni imenici ... 860

19.2.2. Poravnati imenici ... 861

19.2.3. Bezimeni imenik ... 863

19.3. Pristup elementima imenika ... 863

19.3.1. Deklaracija using ... 865

19.3.2. Direktiva using ... 870

19.3.3. Standardni imenik std ... 872

19.3.4. Opće napomene o uključivanju imenika ... 873

19.4. Imenici i stari programski kôd ... 874

piramidica 20. Organizacija kôda u više datoteka ... 877

20.1. Zašto u više datoteka? ... 877

20.2. Povezivanje ... 878

20.2.1. Unutarnje i vanjsko povezivanje ... 880

20.2.2. Specificiranje unutarnjeg povezivanja ... 884

20.2.3. Specifikacija extern... 887

20.3. Pravilo jednokratne definicije ... 889

20.4. Datoteke zaglavlja ... 890

20.5. Primjer raspodjele deklaracija i definicija u više datoteka ... 894

20.6. Opće napomene o uključivanjima zaglavlja ... 902

20.7. Povezivanje s kôdom drugih programskih jezika ... 908

20.7.1. Poziv C funkcija iz C++ kôda ... 909

20.7.2. Uključivanje asemblerskog kôda ... 911

piramidica 21. Ulazni i izlazni tokovi ... 913

21.1. Što su tokovi ... 913

21.2. Organizacija biblioteke ... 915

21.3. Stanje toka ... 917

21.4. Ispis pomoću cout ... 918

21.4.1. Operator umetanja << ... 918

21.4.2. Ispis korisnički definiranih tipova ... 920

21.5. Učitavanje pomoću cin ... 923

21.5.1. Učitavanje pomoću operatora >> ... 923

21.5.2. Učitavanje korisnički definiranih tipova ... 924

21.5.3. Učitavanje znakovnih nizova ... 926

21.5.4. Ostali članovi klase istream ... 928

21.6. Kontrola učitavanja i ispisa ... 931

21.6.1. Vezivanje tokova ... 932

21.6.2. Širina ispisa ... 932

21.6.3. Popunjavanje praznina ... 934

21.6.4. Zastavice za formatiranje ... 934

21.6.5. Formatirani prikaz realnih brojeva ... 937

21.6.6. Manipulatori ... 939

21.7. Datotečni ispis i učitavanje ... 943

21.7.1. Klase ifstream i ofstream ... 943

21.7.2. Otvaranje i zatvaranje datoteke ... 947

21.7.3. Klasa fstream ... 949

21.7.4. Određivanje i postavljanje položaja unutar datoteke ... 951

21.7.5. Binarni zapis i učitavanje ... 953

21.8. Tokovi vezani na znakovne nizove ... 956

21.9. Ulijeva li se svaki tok u more? ... 957

piramidica 22. Upravljanje nîtima izvođenja ... 959

22.1. Što je višenîtno izvođenje? ... 959

22.2. Pokretanje nîti ... 959

22.2.1. Spajanje i odvajanje nîti ... 961

22.3. Sinkronizacija nîti ... 963

22.3.1. Podaci u višenîtnom okruženju ... 964

22.3.2. Mehanizam zaključavanja ... 967

22.3.3. Korištenje muteksa ... 967

22.3.4. Automatsko otključavanje ... 968

22.3.5. Usporedno izvođenje operacija ... 969

22.3.6. Mrtve točke ... 972

22.3.7. Vremenski ograničeno zaključavanje ... 976

22.3.8. Uvjetne varijable ... 978

22.4. Prosljeđivanje iznimki između različitih nîti ... 983

22.5. Asinkrono pokretanje funkcija ... 985

22.6. Atomski tipovi ... 987

22.7. Zaključak ... 988

piramidica 23. Pretprocesorske naredbe ... 989

23.1. U početku bijaše pretprocesor ... 989

23.2. Naredba #include ... 990

23.3. Naredba #define ... 991

23.3.1. Trajanje definicije ... 992

23.3.2. Rezervirana makro imena ... 993

23.3.3. Makro funkcije ... 994

23.3.4. Operatori za rukovanje nizovima ... 995

23.4. Uvjetno prevođenje ... 996

23.4.1. Primjena uvjetnog prevođenja za pronalaženje pogrešaka ... 998

23.5. Ostale pretprocesorske naredbe ... 999

23.6. Ma ča će meni pretprocesor? ... 1000

piramidica 24. Principi objektno orijentiranog dizajna ... 1001

24.1. Zašto uopće C++? ... 1001

24.2. Objektna paradigma ... 1002

24.3. Ponovna iskoristivost ... 1004

24.4. Korak 1: Pronalaženje odgovarajuće apstrakcije ... 1005

24.5. Korak 2: Definicija apstrakcije ... 1006

24.5.1. Definicija ekrana ... 1007

24.5.2. Definicija prozora ... 1008

24.5.3. Definicija izbornika ... 1008

24.6. Korak 3: Definicija odnosa i veza između klasa ... 1009

24.6.1. Odnosi objekata u korisničkom sučelju ... 1012

24.7. Korak 4: Definicija implementacijski zavisnih apstrakcija ... 1016

24.8. Korak 5: Definicija sučelja ... 1017

24.9. Korak 6: Implementacija ... 1025

piramidica Prilog ... 1027

A. Standardna biblioteka ... 1029

B. Korištenje prevoditelja ... 1033

B.1. Code::Blocks ... 1033

B.2. Microsoft Visual C++ ... 1036

B.3. Ispis naših znakova u konzoli ... 1039

piramidica Literatura ... 1041

Programski jezik C++ ... 1041

Mrežne stranice ... 1044

Dizajn ... 1045

piramidica Abecedno kazalo ... 1047