C++ Vol 1. Stanley B. Lippman Josée Lajoie. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.



Samankaltaiset tiedostot
++ 153, 759 += 98 = 102, 751 == 102 -> 756 ->* 655 >> 165, 1063? 133 ^ ~165

1. C++:n STL-kirjasto

Olio-ohjelmointi Syntaksikokoelma

INSIDE C++ Ohjelmoijan käsikirja. Ivor Horton WROX PRESS

Algoritmit C++ Kauko Kolehmainen

Liite. Geneeriset algoritmit aakkosjärjestyksessä

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

12 Mallit (Templates)

Esipuhe. xvii. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.

C++ tukee myös kaksoistarkkuuden ja yhden tarkkuuden liukulukutietotyyppejä:

1 C++:n standardikirjasto

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Neutralointi kipsialtaan vuodon aikana

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

13 Operaattoreiden ylimäärittelyjä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Virtuaalifunktiot ja polymorfismi

C++11 lambdat: [](){} Matti Rintala

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Osa IV. Oliokeskeinen ohjelmointi

Java-kielen perusteet

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Periytymisen käyttö C++:ssa

815338A Ohjelmointikielten periaatteet

Tietueet. Tietueiden määrittely

Osasto: Materiaalin käsittely, Rikkihapon annostelu agglomeraattiin kuljettimella

Periytyminen. Luokat ja olio-ohjelmointi

4. Luokan testaus ja käyttö olion kautta 4.1

Ylikuormitetut funktiot ja käyttäjän määrittelemät konversiot

Merkkijonot ja C++ Antti-Juhani Kaijanaho. 5. maaliskuuta Vanhojen C++-kääntäjien käyttäjät, huomio! 2 Merkkijonojen perusteet

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

Tieto- ja tallennusrakenteet

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Kielioppia: toisin kuin Javassa

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

815338A Ohjelmointikielten periaatteet

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

16. Ohjelmoinnin tekniikkaa 16.1

Luokkamallit Luokkamallin määritteleminen

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

16. Ohjelmoinnin tekniikkaa 16.1

ITKP102 Ohjelmointi 1 (6 op)

Projektinhallinta. Richard Murch. Sisällysluettelo

TW- EAV510/TW- EAV510AC: PPTP- OHJEISTUS

Ehto- ja toistolauseet

Funktiomallit Funktiomallin määrittely

Java-kielen perusteet

Rajapinnat ja olioiden välittäminen

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

A TIETORAKENTEET JA ALGORITMIT

12. Monimuotoisuus 12.1

PROJEKTI- HALLINNAN KÄSIKIRJA

Harjoitus 1 -- Ratkaisut

ITKP102 Ohjelmointi 1 (6 op)

TIETORAKENTEET JA ALGORITMIT

Tietorakenteet ja algoritmit

Rakenteiset tietotyypit Moniulotteiset taulukot

TAMPEREEN TEKNILLINEN YLIOPISTO

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Osoitin ja viittaus C++:ssa

TW- EAV510/TW- EAV510AC: L2TP- OHJEISTUS

Algoritmit 1. Demot Timo Männikkö

15. Ohjelmoinnin tekniikkaa 15.1

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

812336A C++ -kielen perusteet,

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 2 To Timo Männikkö

Harjoitus 5 (viikko 41)

Operaattoreiden uudelleenmäärittely

7/20: Paketti kasassa ensimmäistä kertaa

Euroopan unionin neuvosto Bryssel, 11. toukokuuta 2016 (OR. en)

Viittausalue ja elinaika

Harjoitustyö: virtuaalikone

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

P e d a c o d e ohjelmointikoulutus verkossa

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Tietorakenteet ja algoritmit

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

14.1 Rekursio tyypitetyssä lambda-kielessä

812341A Olio-ohjelmointi, I Johdanto

TW- EAV510 / TW- EAV510 AC: OpenVPN

OHJ-1150 Ohjelmointi II

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

ITKP102 Ohjelmointi 1 (6 op)

C++ Ohjelmoijan käsikirja. Hakemisto. #ifdef 394 #ifndef 394, 396 ympäristön tuki 396 koodi, monistamisen välttäminen

Toiminnanohjausjärjestelmien hyödyntäminen Suomessa 2013

Algoritmit 2. Luento 2 Ke Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

12. Monimuotoisuus 12.1

Omat tietotyypit. Mikä on olio?

Ohjelman virheet ja poikkeusten käsittely

Common Lisp Object System

Transkriptio:

C++ Vol 1 Stanley B. Lippman Josée Lajoie

C++ Vol 1 Kirjoittaja Kääntäjä Kansi Kustantaja Stanley B. Lippman & Josée Lajoie Erkki Huru Frank Chaumont Oy Edita Ab IT Press PL 760 00043 EDITA Sähköpostiosoite Internet palvelu@itpress.fi www.itpress.fi Painopaikka Oy Edita Ab, Helsinki 2000 Authorized translation from the English language edition published by Addison Wesley Longman, Inc. Copyright 1998 All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Finnish language edition published by IT Press Copyright 2000. Kaikki oikeudet pidätetään. Tämän julkaisun tai sen osan jäljentäminen ilman tekijän kirjallista lupaa painamalla, monistamalla, äänittämällä tai muulla tavoin on tekijänoikeuslain mukaisesti kielletty. Suomenkielisen version on julkaissut IT Press Copyright 2000. Alkuperäisen teoksen nimi on C++ Primer Third Edition ISBN 951-826-191-1

Bethille, joka saa tämän ja kaiken muun mahdolliseksi Danielille ja Annalle, jotka käytännössä hillitsevät kaikkia mahdollisuuksia SBL Markille ja Äidille heidän ehdottomasta rakkaudesta ja tuesta. JL

Sisällysluettelo v SISÄLLYSLUETTELO Tämän kirjan rakenne xviii Muutokset kolmanteen painokseen C++-kielen tulevaisuus xxiii Kiitokset xxiii Kiitokset toiseen painokseen xxiv Lähdeluettelo xxv xxii OSA I C++, yleiskatsaus 1 1 Alkuun pääsy 5 Ongelman ratkaisu 5 C++-ohjelma 6 Esikääntäjän direktiivit 13 Muutama sana kommenteista 17 Ensimmäinen katsaus syöttöön ja tulostukseen 19

vi Sisällysluettelo 2 Matka C++-kieleen 23 Sisäinen Array-tietotyyppi 23 Dynaaminen muistinvaraus ja osoittimet 26 Oliopohjainen suunnittelu 30 Oliokeskeinen suunnittelu 41 Geneerinen suunnittelu 51 Poikkeuspohjainen suunnittelu 58 Taulukko jollain muulla nimellä 62 Standardinmukainen taulukko on vektori 68 OSA II Peruskieli 73 3 C++:n tietotyypit 75 Literaalivakio 75 Muuttujat 79 Osoitintyypit 88 Merkkijonotyypit 93 Const-määre 102 Viittaustyypit 106 Bool-tyyppi 110 Luetellun joukon tyypit 111 Taulukkotyypit 114 Vektori-säiliötyyppi 121 Kompleksilukujen tyypit 125 Typedef-nimet 126 Volatile-määre 127 Parityyppi 127 Luokkatyypit 128

Sisällysluettelo vii 4 Lausekkeet 141 Mikä on lauseke? 141 Aritmeettiset operaattorit 143 Yhtäsuuruus-, vertailu- ja loogiset operaattorit 146 Sijoitusoperaattorit 149 Lisäys- ja vähennysoperaattorit 153 Kompleksilukujen operaatiot 155 Ehdollinen operaattori 158 Sizeof-operaattori 159 New- ja delete-lausekkeet 162 Pilkkuoperaattori 164 Biteittäiset operaattorit 164 Bittijoukko-operaatiot 168 Sidontajärjestys 172 Tyyppikonversiot 176 Esimerkki pinoluokasta 185 5 Lauseet 189 Yksinkertaiset ja yhdistetyt lauseet 189 Esittelylause 190 If-lause 194 Switch-lause 202 For-lause 210 While-lause 214 Do while -lause 216 Break-lause 218 Continue-lause 220 Goto-lause 220 Esimerkki linkitetystä listasta 222

viii Sisällysluettelo 6 Abstraktit säiliötyypit 249 Tekstinkyselyjärjestelmämme 250 Vektori vai lista? 254 Kuinka vektori kasvaa itsestään 256 Jonosäiliön määrittely 260 Iteraattorit 265 Jonosäiliöiden operaatioita 269 Tekstirivien tallentaminen 273 Alimerkkijonon löytäminen 276 Välimerkkien käsittely 282 Merkkijono jossain muussa muodossa 285 Merkkijonon lisäoperaatioita 288 Tekstin sijaintitaulukon rakentaminen 294 Poisjätettävän sanajoukon rakentaminen 305 Koko ohjelma 308 Monikartta/monijoukko 318 Pino 321 Jono ja prioriteettijono 323 Palaaminen istack-luokkaamme 324 OSA III Proseduraalipohjainen ohjelmointi 329 7 Funktiot 331 Yleiskatsaus 331 Funktion prototyyppi 334 Argumenttien välitys 338 Arvon palauttaminen 357 Rekursio 362 Välittömät eli inline-funktiot 363 Linkitysdirektiivit: extern "C" 365 main(): komentorivin valitsimien käsittely 367 Osoittimet funktioihin 378

Sisällysluettelo ix 8 Viittausalue ja elinaika 389 Viittausalue 389 Globaalit oliot ja funktiot 395 Paikalliset oliot 402 Dynaamisesti varatut oliot 406 Nimiavaruuksien määrittelyt 420 Nimiavaruuden jäsenten käyttö 434 9 Ylikuormitetut funktiot 443 Ylikuormitettujen funktioiden esittelyt 443 Ylikuormituksen ratkaisun kolme vaihetta 455 Argumenttien tyyppikonversiot 458 Funktion ylikuormituksen ratkaisun yksityiskohdat 474 10 Funktiomallit 489 Funktiomallin määrittely 489 Funktiomallin instantiointi 497 Malliargumentin päättely 500 Eksplisiittiset malliargumentit 505 Mallin käännösmallit 509 Mallin eksplisiittinen erikoistaminen 514 Funktiomallien ylikuormitus 520 Instantiointien ylikuormituksen ratkaisu 523 Nimiresoluutio mallimäärittelyissä 531 Nimiavaruudet ja funktiomallit 537 Esimerkki funktiomallista 542

x Sisällysluettelo 11 Poikkeusten käsittely 547 Poikkeuksen heittäminen 547 Try-lohko 551 Poikkeuksen sieppaaminen 555 Poikkeusmääritykset 564 Poikkeukset ja suunnittelunäkökohdat 568 12 Geneeriset algoritmit 571 Yleiskatsaus 571 Geneeristen algoritmien käyttö 575 Funktio-oliot 586 Paluu iteraattoreihin 594 Geneeriset algoritmit 602 Milloin geneerisiä algoritmeja ei tulisi käyttää? 606 OSA IV Oliopohjainen ohjelmointi 611 13 Luokat 613 Luokan määrittely 613 Luokkaoliot 621 Luokan jäsenfunktiot 624 Implisiittinen this-osoitin 636 Staattiset luokan jäsenet 640 Osoitin luokan jäseneen 648 Yhdiste: tilaa säästävä luokka 657 Bittikenttä: tilaa säästävä jäsen 663 Luokan viittausalue 665 Sisäkkäiset luokat 672 Luokat nimiavaruuden jäseninä 683 Paikalliset luokat 687

Sisällysluettelo xi 14 Luokan alustus, sijoitus ja tuhoaminen 689 Luokan alustus 689 Luokan muodostaja 691 Luokan tuhoaja 703 Luokkaoliotaulukot ja -vektorit 710 Jäsenen alustusluettelo 717 Jäsenittäinen alustus 724 Jäsenittäinen sijoitus 730 Tehokkuusnäkökohtia 733 15 Ylikuormitetut funktiot ja käyttäjän määrittelemät konversiot 737 Operaattorin ylikuormitus 737 Ystävät 748 Operaattori = 751 Operaattori [ ] 754 Operaattori ( ) 755 Operaattori -> 756 Operaattorit ++ ja -- 759 Operaattorit new ja delete 763 Käyttäjän määrittelemät konversiot 771 Konversion valinta 782 Ylikuormituksen ratkaisu ja jäsenfunktiot 795 Ylikuormituksen ratkaisu ja operaattorit 800 16 Luokkamallit 811 Luokkamallin määritteleminen 811 Luokkamallin instantiointi 820 Luokkamallien jäsenfunktiot 830 Ystäväesittelyt luokkamalleissa 834 Luokkamallien staattiset tietojäsenet 840 Luokkamallien sisäkkäiset tyypit 842

xii Sisällysluettelo Jäsenmallit 845 Luokkamallit ja käännösmalli 849 Luokkamallin erikoistamiset 856 Luokkamallin osittainen erikoistaminen 862 Nimiresoluutio luokkamalleissa 863 Nimiavaruudet ja luokkamallit 866 Array-luokkamalli 868 OSA V Oliokeskeinen ohjelmointi 877 17 Luokkaperiytyminen ja alityypitys 879 Luokkahierarkian määrittely 882 Hierarkian jäsenten tunnistaminen 890 Kantaluokan jäsenten käsittely 900 Kantaluokan ja johdetun luokan muodostus 908 Kantaluokan ja johdetun luokan virtuaaliset funktiot 919 Jäsenittäinen alustaminen ja sijoittaminen 943 UserQuery-luokka käyttäjän kyselyiden hallintaan 948 Kokoaminen 957 18 Moni- ja virtuaaliperiytyminen 965 Näyttämön järjestely 965 Moniperiytyminen 970 Julkinen, yksityinen ja suojattu periytyminen 977 Luokan viittausalue periytymisessä 985 Virtuaaliperiytyminen 993 Esimerkki moni- ja virtuaaliperiytymisestä 1006

Sisällysluettelo xiii 19 Periytymisen käyttö C++:ssa 1021 Ajonaikainen tyyppitunnistus (RTTI) 1021 Poikkeukset periytymisessä 1033 Ylikuormituksen ratkaisu ja periytyminen 1051 20 Iostream-kirjasto 1063 Tulostusoperaattori << 1067 Syöttö 1072 Syötön ja tulostuksen lisäoperaattorit 1083 Tulostusoperaattorin << ylikuormitus 1090 Syöttöoperaattorin >> ylikuormitus 1095 Tiedoston syöttö ja tulostus 1097 Ehtotilat 1107 String-virrat 1109 Muotoilutila 1112 Vahvasti tyypitetty kirjasto 1121 LIITE Geneeriset algoritmit aakkosjärjestyksessä 1123 accumulate() 1125 adjacent_difference() 1126 adjacent_find() 1127 binary_search() 1128 copy() 1129 copy_backward() 1130 count() 1131 count_if() 1133 equal() 1134 equal_range() 1136 fill() 1138 fill_n() 1139 find() 1140 find_if() 1141 find_end() 1143 find_first_of() 1144 for_each() 1145 generate() 1146

xiv Sisällysluettelo generate_n() 1147 includes() 1148 inner_product() 1149 inplace_merge() 1150 iter_swap() 1152 lexicographical_compare() 1153 lower_bound() 1154 max() 1156 max_element() 1156 min() 1156 min_element() 1157 merge() 1158 mismatch() 1159 next_permutation() 1160 nth_element() 1162 partial_sort() 1163 partial_sort_copy() 1164 partial_sum() 1165 partition() 1166 prev_permutation() 1168 random_shuffle() 1169 remove() 1169 remove_copy() 1170 remove_if() 1171 remove_copy_if() 1172 replace() 1173 replace_copy() 1173 replace_if() 1174 replace_copy_if() 1174 reverse() 1175 reverse_copy() 1176 rotate() 1177 rotate_copy() 1177 search() 1178 search_n() 1180 set_difference() 1181 set_intersection() 1181 set_symmetric_difference() 1182 set_union() 1182 sort() 1184 stable_partition() 1185 stable_sort() 1186 swap() 1187

Sisällysluettelo xv swap_range() 1188 transform() 1189 unique() 1190 unique_copy() 1191 upper_bound() 1192 Kekoalgoritmit 1194 make_heap() 1194 pop_heap() 1195 push_heap() 1195 sort_heap() 1195 Hakemisto 1199

xvi Sisällysluettelo