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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

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

2 C++ Ohjelmoijan käsikirja Kirjoittanut Kääntäjä Kansi Kustantaja Ivor Horton Jouni Laaksonen Frank Chaumont IT Press PL HELSINKI Sähköpostiosoite Internet Painopaikka Gummerus Kirjapaino Oy, Jyväskylä 1999 Authorized translation from the English language edition published by Wrox Press 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 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 Alkuperäisen teoksen nimi on Ivor Horton s Beginning C++ ISBN X

3 Sisältö C++ Ohjelmoijan käsikirja Johdanto 1 Miksi C++? 1 Miksi ANSI/ISO-standardi? 1 Merkintätavat 2 Lähdetekstit 3 CD-levy 4 Virheet ja päivitykset 4 1: Perusasiat 7 Ohjelmointikielet 7 Tulkattu vs. käännetty ohjelman suoritus 8 Kirjastot 9 Miksi C++ on niin suosittu kieli? 9 C++:n ANSI-standardi 10 Yksinkertainen C++-ohjelma 10 Nimet 12 Nimiavaruudet 12 Varatut sanat 13 C++:n lauseet ja lohkot 14 Ohjelman rakenne 14 Suoritettavan tiedoston tekeminen lähdetekstitiedostoista 16 Kääntäminen 17 Linkittäminen 17 Merkit ja merkkijoukot 19 Merkkien koodaus 19 Koodinvaihtomerkit 19 Merkit UCS-merkkijoukossa 22 Tyhjät merkit 22 Ohjelmien kommentointi 23 i

4 C++ Ohjelmoijan käsikirja Standardikirjasto 25 C++-ohjelmointi 25 Proseduraalinen ja oliopohjainen ohjelmointi 26 Yhteenveto 27 Harjoituksia 28 2: Perustietotyypit ja laskutoimitukset 31 Tieto ja tietotyypit 31 Yksinkertaiset laskutoimitukset 32 Kokonaislukuliteraalit 33 Binääriluvut 33 Heksadesimaaliluvut 34 Negatiiviset binääriluvut 36 Heksadesimaaliset kokonaislukuliteraalivakiot 37 Oktaaliset kokonaislukuliteraalivakiot 38 Kokonaislukulaskenta 39 Tulostuksen ulkoasun muotoilu 42 Muuttujien käyttö 43 Muuttujien nimet 44 Kokonaislukumuuttujat 44 Kokonaislukutyypit 47 Kokonaisluvut muistissa 48 Sijoitusoperaattori 49 Peräkkäiset sijoitukset 51 Muuttujan arvon muuttaminen 51 Sijoitusoperaattorit op= 52 Kokonaisluvun arvon lisäys ja vähennys 53 const-avainsana 54 Liukulukuarvot 56 Liukulukutietotyypit 57 Liukulukuarvojen käsittely 60 Tulostuksen muuntaminen 61 Merkkien käyttö 63 Laajennetut merkkijoukot 65 Alkuarvon asetus funktiomuotoisena 66 ii

5 Sisältö Yhteenveto 67 Harjoituksia 68 3: Lisää perustietotyypeistä 71 Eri tietotyyppejä sisältävät lausekkeet 71 Sijoitukset ja eri tietotyypit 73 Eksplisiittiset tyypinmuunnokset 73 Vanhantyyliset tyypinmuunnokset 76 Tyyppien tiedot 77 Tietotyyppien raja-arvot 79 Bittioperaattorit 81 Bittien siirto-operaattori 81 Etumerkillisten kokonaislukujen bittisiirto 83 Bittitason loogiset operaattorit 84 Bittitason AND-operaattori 84 Bittitason OR 86 Bittitason poissulkeva OR 87 Lisää muokkausfunktioista 92 Luetellut tietotyypit 93 Nimettömät luetellut tietotyypit 95 Tyypinmuunnokset kokonaislukujen ja lueteltujen tietotyyppien välillä 96 Tietotyyppien synonyymit 98 Muuttujan elinaika 99 Automaattiset muuttujat 100 Muuttujan määrittelyjen sijainti 102 Globaalit muuttujat 102 Staattiset muuttujat 105 Erikoismuokkausfunktiot 106 Ulkoisten muuttujien määrittely 106 Suoritusjärjestys ja laskemissuunta 107 Yhteenveto 108 Harjoituksia 109 4: Valinnat ja päätökset 111 Tiedon vertailu 111 Vertailuoperaattoreiden käyttö 112 iii

6 iv C++ Ohjelmoijan käsikirja Liukulukuarvojen vertailu 114 If-lause 115 Sisäkkäiset if-lauseet 117 Merkkien koodauksesta riippumaton merkkien käsittely 119 if-else -lause 122 Sisäkkäiset if-else -lauseet 125 Sisäkkäiset if-lauseet 126 Loogiset operaattorit 127 Looginen AND 128 Looginen OR 128 Looginen NOT 129 Ehto-operaattori 131 switch-lause 134 Ehdoton hyppykäsky 139 Valintalauseiden lohkot ja muuttujien näkyvyysalue 139 Yhteenveto 141 Harjoituksia 142 5: Silmukat 145 Silmukoiden perusteet 145 while-silmukka 147 do-while -silmukka 149 Monimutkaisemmat while-silmukan ehtolauseet 151 for-silmukka 152 Silmukat ja muuttujien näkyvyysalue 155 for-silmukat ANSI -yhteensopimattomissa kääntäjissä 155 for-silmukan suorituksen kontrolloiminen liukuluvuilla 156 Monimutkaisten silmukan kontrollointilausekkeiden käyttö 160 Pilkku-operaattori 162 Sisäkkäiset silmukat 163 Silmukan lauseiden yli hyppääminen 167 Silmukasta poistuminen 170 Päättymättömät silmukat 170 Yhteenveto 175 Harjoituksia 176

7 Sisältö 6: Taulukot ja merkkijonot 179 Taulukot 179 Taulukon käyttö 180 Taikanumeroiden välttäminen 184 Taulukoiden alustaminen 184 Taulukon alkioiden alustaminen nollaksi 186 Taulukon koon määrittely alkuarvoluettelolla 186 Taulukon alkioiden lukumäärän laskeminen 186 Merkkitaulukot 188 Moniulotteiset taulukot 192 Moniulotteisten taulukoiden alustus 194 Ulottuvuuden määrittely oletusarvoisesti 196 Moniulotteiset merkkitaulukot 197 Paremmat merkkijonot 199 string-tyyppisten olioiden esittely 200 string-olioden käsittely 201 Merkkijonojen yhdistäminen 202 Merkkijonon yksittäisten merkkien käsittely 204 Merkkijonon osien käsittely 206 Merkkijonojen vertailu 207 compare()-funktio 210 Merkkijonon etsintä 212 Merkkijoukon merkkien etsintä merkkijonosta 215 Etsiminen taaksepäin 219 Merkkijonon muuttaminen 220 Merkkijonon lisäys 221 Ali-merkkijonon korvaus 222 Merkkien poisto merkkijonosta 225 string-tyyppiset taulukot 226 Yhteenveto 227 Harjoituksia 228 7: Osoittimet 231 Mikä on osoitin? 231 Osoittimen esittely 232 Osoittimien käyttö 233 Osoite-operaattori 233 Osoitus-operaattori 234 v

8 vi C++ Ohjelmoijan käsikirja Miksi käyttää osoittimia? 235 Osoittimien alustus 238 char-tyyppisten osoittimien alustus 239 Merkkijonojen lajittelu osoittimien avulla 244 Tulostuksen ulkoasun parantaminen 248 Osoitinvakiot ja osoittimet vakioihin 248 Osoittimet ja taulukot 250 Osoitinlaskenta 251 Kahden osoittimen välisen eron laskeminen 253 Osoitinmuodon käyttö taulukon nimen yhteydessä 253 Osoittimien käyttö moniulotteisten taulukoiden yhteydessä 257 Osoitinmuodon käyttö moniulotteisen taulukon nimen yhteydessä 257 Operaatiot C-tyylisten merkkijonojen yhteydessä 260 Merkkijonojen yhdistäminen 260 Dynaaminen muistinvaraus 261 Vapaa muisti eli keko 262 Operaattorit new ja delete 263 Taulukoiden dynaaminen muistinvaraus 264 Dynaamisen muistinvarauksen vaarat 266 Muistivuodot 267 Osoittimet ja muuttujien näkyvyysalue 267 Vapaan muistin pirstoutuminen 267 Monirivisen merkkijonon sanojen lukeminen ja laskeminen 268 Sanojen osoitintaulukon luominen 269 string-tyyppisten olioiden luonti sanoja varten 270 Sanojen lajittelu ja tulostus 270 Muistin vapauttaminen 271 Osoittimien muuntaminen 272 Yhteenveto 273 Harjoituksia 274 8: Ohjelmointi funktioiden avulla 277 Ohjelman jakaminen osiin 277 Miksi ohjelmat tulee jakaa osiin 278 Funktioiden perusteet 279 Funktion määrittely 280 Funktion otsikko 280

9 Sisältö Funktion otsikon yleinen muoto 280 Funktion runko 281 Parametrit 282 Paluuarvot 283 return-lause 284 Funktion esittely 284 Funktion prototyyppi 285 Funktion prototyypin käyttö 286 Parametrien välitys funktiolle 287 Arvoparametrit 287 Osoittimen välitys funktiolle 289 Taulukoiden välitys funktiolle 291 const-tyyppiset parametrit 294 Moniulotteisen taulukon välittäminen funktiolle 295 Viittausparametrit 297 const-viittausten käyttö 299 Viittaukset vs. osoittimet 300 Viittausten esittely 300 main()-funktion parametrit 301 Parametrin oletusarvot 302 Useiden parametrien oletusarvot 303 Arvon palauttaminen funktiosta 306 Osoittimen palauttaminen 306 Viittauksen palauttaminen 311 Uuden muuttujan palauttaminen funktiosta 311 Avoimet funktiot 312 Staattiset muuttujat 312 Yhteenveto 315 Harjoituksia 316 9: Lisää funktioista 319 Funktioiden uudelleenmäärittely 319 Funktion allekirjoitus 320 Uudelleenmäärittely ja osoitinparametrit 322 Uudelleenmäärittely ja viittausparametrit 322 Uudelleenmäärittely ja const-parametrit 324 Uudelleenmäärittely ja const-tyyppinen osoitinparametri 325 Uudelleenmäärittely ja viittausparametrit 325 Uudelleenmäärittely ja parametrien oletusarvot 326 vii

10 viii C++ Ohjelmoijan käsikirja Mallifunktiot 326 Malliparametrin määrittely eksplisiittisesti 330 Erikoistuneet mallifunktiot 332 Erikoistuneen mallifunktion määrittely 332 Mallifunktiot ja uudelleenmäärittely 334 Mallifunktio, jolla on monta malliparametriä 335 Muut kuin tietotyyppiä olevat malliparametrit 336 Osoittimet funktioihin 337 Funktio-osoittimen esittely 338 Funktion välittäminen parametrinä 341 Funktio-osoitintaulukot 343 Rekursio 344 Rekursion käyttö 346 Lajittelun toteuttaminen rekursiivisesti 347 Yhteenveto 353 Harjoituksia : Ohjelmatiedostot ja esikääntäjä 357 Ohjelmatiedostojen käsittely 357 Ohjelmatiedostot ja linkitys 359 Ulkoiset muuttujat 360 Toisessa tiedostossa olevan const-muuttujan käsittely 362 Nimiavaruudet 365 Globaali nimiavaruus 366 Nimiavaruuksien esittely 366 Nimien nimiavaruuden määrittely implisiittisesti 370 using-esittelyjen käyttö 371 Funktiot ja nimiavaruudet 372 Mallifunktiot ja nimiavaruudet 376 Nimiavaruuden laajennukset 378 Nimettömät nimiavaruudet 381 Nimiavaruuksien peitenimet 382 Sisäkkäiset nimiavaruudet 382 Esikääntäjä 383 Otsikkotiedostojen sisällyttäminen ohjelmiin 384 Korvaukset ohjelman koodissa 386 Merkkijonojen poistaminen ohjelmasta 387

11 Sisältö Tunnisteen määrittelyalueen päättäminen 387 Makrokorvaukset 388 Makrot voivat aiheuttaa virheitä 389 Moniriviset esikääntäjäkomennot 390 Merkkijonot makron parametreinä 391 Parametrien yhdistäminen 392 Loogiset esikääntäjäkomennot 393 Looginen #if-komento 393 Koodin monistamisen välttäminen 394 Arvojen testauksen komennot 396 Koodin valinta monista vaihtoehdoista 397 Esikääntäjän standardimakrot 398 #error- ja #pragma-komennot 399 Testausmenetelmät 399 Itegroidut debuggerit 400 Testaus esikääntäjän avulla 400 assert-makron käyttö 407 Yhteenveto 409 Harjoituksia : Omat tietotyypit 413 Mikä on olio? 413 C++:n struktuurit 415 Struktuurit 415 Struktuurin määrittely 416 Struktuuriolion esittely 417 Struktuurimuuttujan alustus 418 Struktuurimuuttujan jäsenten käsittely 419 Struktuurin jäsenfunktiot 423 Jäsenfunktion määrittelyn sijoittaminen 424 Osoittimien käyttö struktuurien yhteydessä 425 Jäsenmuuttujien käsittelyn osoittimien avulla 425 Jäseneen osoitus -operaattori 426 Olio-osoittimien käyttötilanteet 428 Unionit 429 Unionien esittely 430 Nimettömät unionit 432 Monimutkaisemmat struktuurit 432 ix

12 C++ Ohjelmoijan käsikirja Struktuurit struktuurin jäsenenä 434 Yhteenveto 440 Harjoituksia 440 x 12: Luokat 443 Luokat ja olio-ohjelmointi 443 Kapselointi 444 Tiedon kätkentä 445 Perityminen 446 Polymorfismi 447 Terminologiaa 448 Luokan määrittely 449 Muodostinfunktiot 452 Muodostinfunktion määrittelyn sijoittaminen luokan ulkopuolelle 454 Oletusmuodostinfunktio 456 Oletusarvoiset alkuarvot 460 Alkuarvolistan käyttö muodostinfunktiossa 461 explicit-avainsanan käyttö 461 Luokan yksityiset jäsenet 463 Yksityisten jäsenten käyttö 467 Oletuskopiomuodostin 469 Ystävät 470 Luokan ystäväfunktiot 471 Ystäväluokat 474 this -osoitin 474 Vakiotyyppiset oliot ja jäsenfunktiot 478 Luokan muuttuvat jäsenmuuttujat 480 const-määreen vaikutuksen poistaminen 481 Luokan olioiden taulukko 481 Luokan olion koko 484 Luokan staattiset jäsenet 486 Luokan staattiset jäsenmuuttujat 487 Staattisen jäsenmuuttujan käsittely 490 Staattisen jäsenmuuttujan tyyppi 491 Luokan staattiset jäsenfunktiot 492

13 Sisältö Yhteenveto 493 Harjoituksia : Luokan operaatiot 497 Osoittimet ja viittaukset luokan olioihin 497 Osoittimet jäsenmuuttujina 498 Paketti-luokan määrittely 500 AutoKuorma-luokan määrittely 503 AutoKuorma-luokan toteutus 504 Jäsenfunktioiden määrittely 505 Luokan käsittelyn kontrollointi 513 Sisäkkäiset luokat Sisäkkäiset luokat ja julkinen saantitapa 515 Ystäväluokat 515 Kopiomuodostimen tärkeys 515 Kopiomuodostimen toteuttaminen 516 Viittausparametrit 517 Dynaaminen muistinvaraus oliossa 522 Mikä on tuhoajafunktio? 522 Olioiden tuhoaminen 522 Tuhoajafunktio 523 Oletustuhoajafunktio 523 Tuhoajafunktion toteuttaminen 525 Viittaukset luokassa 527 Viittaukset luokan jäsenmuuttujina 527 Yhteenveto 530 Harjoituksia : Operaattoreiden uudelleenmäärittely 533 Operaattoreiden toteutus luokille 533 Operaattoreiden uudelleenmäärittely 534 Operaattorit, jotka voidaan uudelleenmääritellä 534 Uudelleenmääritellyn operaattorin toteutus 535 xi

14 xii C++ Ohjelmoijan käsikirja Globaalit operaattorifunktiot 539 Operaattorin täydellinen toteuttaminen 539 Erilaiset operaattorifunktiot 543 Sijoitusoperaattorin uudelleenmäärittely 544 Sijoitusoperaattorin toteuttaminen 545 Aritmeettisten operaattoreiden uudelleenmäärittely 551 Operaattorin toteutus perustuen toiseen operaattoriin 556 Indeksointioperaattorin uudelleenmäärittely 557 L-arvo ja uudelleenmääritelty indeksointioperaattori 563 const-tyyppinen uudelleenmäärittely 564 Tyypinmuunnosten uudelleenmäärittely 564 Kaksimerkityksiset muunnokset 565 Lisäys- ja vähennysoperaattoreiden uudelleenmäärittely 566 Fiksut osoittimet 566 Fiksun osoittimen määrittely Laatikko-olioille 567 Fiksun osoitinluokan toteuttaminen 570 new ja delete -operaattorien uudelleenmäärittely 573 Yhteenveto 574 Harjoituksia : Periytyminen 577 Luokat ja olio-ohjelmointi 577 Hierarkiat 578 Luokkien periytyvyys 579 Periytyminen vs. kerääminen 580 Luokkien periyttäminen kantaluokasta 581 Jäsenten saantitapa perinnässä 584 Luokan jäsenten esittely suojatuiksi 588 Perittyjen jäsenten saantitavat 590 Saantitavan hallintakomentojen käyttö luokkien hierarkiassa 592 Perittyjen jäsenten saantitavan muuttaminen 593 Muodostinfunktioiden toiminta periytetyssä luokassa 595 Periytetyn luokan kopiomuodostin 599 Tuhoajafunktiot periytymisessä 602 Saman nimiset jäsenet 605 Saman nimiset jäsenfunktiot 606 Moniperintä 607

15 Sisältö Monta kantaluokkaa 607 Perityn jäsenen monimerkityksisyys 608 Toistuva perintä 614 Virtuaaliset kantaluokat 616 Muunnokset luokkien tyyppien välillä 617 Yhteenveto 618 Harjoituksia : Virtuaalifunktiot ja polymorfismi 621 Polymorfismin perusteet 621 Osoitin kantaluokkaan 622 Perittyjen funktioiden kutsuminen 624 Virtuaalifunktiot 628 Virtuaalifunktion vaatimukset 632 Virtuaalifunktiot ja luokkahierarkia 633 Saantitavat ja virtuaalifunktiot 634 Parametrien oletusarvot virtuaalifunktioissa 636 Viittausten käyttö kutsuttaessa virtuaalifunktioita 637 Virtuaalifunktion kantaluokan version kutsuminen 639 Olioiden osoittimien muuntaminen 640 Dynaaminen muunnos 642 Osoittimien dynaamiset muunnokset 642 Viittausten muuntaminen 644 Polymorfismin kustannukset 644 Puhtaat virtuaalifunktiot 645 Abstraktit luokat 646 Abstrakti luokka rajapintana 649 Epäsuorat abstraktit kantaluokat 649 Olioiden tuhoaminen osoittimien avulla 653 Virtuaaliset tuhoajafunktiot 654 Tyyppien tunnistus suoritusaikana 656 Osoittimet luokan jäseniin 657 Osoittimet jäsenmuuttujiin 657 Osoitin jäseneen -valintaoperaattori 659 Osoittimet jäsenfunktioihin 661 Osoittimen jäseneen välittäminen funktiolle 665 Yhteenveto 666 xiii

16 xiv C++ Ohjelmoijan käsikirja Harjoituksia : Ohjelman virheet ja poikkeusten käsittely 669 Virheiden käsittely 669 Mitä poikkeukset ovat? 670 Poikkeuksen muodostaminen 671 Poikkeusten käsittely 674 Käsittelemättömät poikkeukset 675 Poikkeuksen muodostava koodi 676 Sisäkkäiset try-lohkot 678 Luokkaoliot poikkeuksina 681 Oikean catch-käsittelijän valinta 683 Periytetyn luokan poikkeuksen käsittely kantaluokan käsittelijällä 687 Poikkeuksen uudelleenmuodostaminen 689 Kaikkien poikkeusten käsittely 693 Poikkeuksia muodostavat funktiot 695 Funktion try-lohko 695 Funktiossa mahdollisesti muodostettavien poikkeusten määrittely 696 Yllättävät poikkeukset 697 Poikkeusten muodostaminen muodostinfunktioissa 698 Poikkeukset ja tuhoajafunktiot 699 Standardikirjaston poikkeukset 700 Standardikirjaston poikkeusluokat 701 Standardipoikkeusten käyttö 702 Omien poikkeusluokkien periyttäminen 702 Yhteenveto 703 Harjoituksia : Mallit 707 Malliluokka 707 Mallien käyttökohteet 708 Mallien määrittely 709 Malliparametrit 709 Yksinkertainen malli 710 Mallin jäsenmuuttujien määrittely 712

17 Sisältö Mallin ilmentymien luominen 715 Mallien vienti 722 Mallin staattiset jäsenet 723 Mallin ei-tyyppiparametrit 724 Ei-tyyppiparametrien esimerkki 725 Jäsenfunktioiden mallit 726 Ei-tyyppiparametrien arvot 728 Osoittimet ja taulukot ei-tyyppiparametreinä 729 Malliparametrien oletusarvot 736 Mallin ilmentymän eksplisiittinen muodostus 736 Mallin ystävät 737 Erikoistapaukset 739 Osittain erikoistuneet mallit 739 Osittain erikoistuneen mallin valinta 740 Mallit ja sisäkkäiset luokat 741 Mallifunktioiden määrittely 743 Kehittyneemmät mallit 750 Yhteenveto 751 Harjoituksia : Syöttö- ja tulostusoperaatiot 755 C++:n syöttö ja tulostus 755 Virrat 756 Virtaluokat 758 Standardivirrat 759 Virtojen <<- ja >>-operaattorit 759 Virtojen >>-operaattori 760 Virtojen <<-operaattori 761 Virtojen muokkausfunktiot 762 Parametrilliset muokkausfunktiot 763 Tiedostovirrat 764 Tiedostoon kirjoittaminen 765 Tiedostosta lukeminen 767 Tiedoston avaustavan asetus 770 Virran nykyisen sijainnin käsittely 777 Muotoilemattomat virtaoperaatiot 779 Muotoilematon syöttövirta 780 xv

18 xvi C++ Ohjelmoijan käsikirja Muotoilematon tulostusvirta 782 Virtojen syötön/tulostuksen virheet 782 I/O-virheet ja poikkeukset 784 Binäärimuotoiset virtaoperaatiot 784 Numeerisen tiedon kirjoitus binäärimuodossa 788 Virran luku/kirjoitus -operaatiot 793 Virran hajasaanti 794 Binäärivirran hajasaanti 794 Merkkijonovirrat 801 Oliot ja virrat 803 <<-operaattorin uudelleenmäärittely olioille 803 <<-operaattorin uudelleenmäärittely olioille 806 Monimutkaisemmat oliot ja virrat 808 Virtojen tuki malleille 811 <<-operaattorin käyttö Pino-mallissa 812 >>-operaattorin käyttö Pino-mallissa 814 Pinon olioiden käsittely 815 Yhteenveto 820 Harjoituksia : Standardi mallikirjasto 823 STL:n arkkitehtuurin perusteet 823 STL:n otsikkotiedostot 825 vector-säiliön käyttö 826 vector-säiliön perusoperaatiot 828 vector-säiliön käyttö taulukko-operaatioissa 834 Keskiarvon laskeminen iteraattoreiden avulla 835 Mallitaulukko-vaihtoehto 838 Iteraattori istream_iterator 839 Toiminnallisuutta sisältävät istream_iterator-iteraattorit 841 Lisää iteraattoreista 842 Iteraattorit 842 Iteraattoreiden välitys algoritmille 845 istream_operator:n ja ostream_operator:n jäljittely 847 Iteraattoreiden vaatimukset 848 Parempi Kokonaisluku-iteraattori 849 Syöttö- ja tulostusiteraattorit 855

19 Sisältö Tähän saakka käsittelemämme aiheet 857 Muistinkäsittely 857 Apuluokka Laskuri 858 STL:n vaatimukset säiliön alkiolle 860 Säiliöalkion vaatimukset 861 vector-säiliön ja sen muistinhallinnan tarkastelu 863 Kuinka se toimii: Muodostinfunktion testit 864 Koon muutto -testit 865 Lisää koon muutto -testejä 866 Lisäys alkuun ja loppuun -testit 867 Sijoitus- ja vertailutestit 867 list-säiliö 868 Kommentteja list-säiliöstä 874 Assosiatiivinen map-säiliö 875 Suorituskyky ja erikoistuminen 881 Yhteenveto 883 Harjoituksia 883 A: ASCII-koodit 885 ASCII Merkit ASCII Merkit B: C++:n varatut sanat 889 C: Standardikirjaston otsikkotiedostot 893 Kielen tuki 893 Syöttö/Tulostus 894 Diagnostiikka 894 Yleiset välineet 895 Merkkijonot 895 Säiliöt 895 Iteraattorit 896 Algoritmit 896 Numeeriset operaatiot 897 Paikallistaminen 897 xvii

20 C++ Ohjelmoijan käsikirja D: Operaattoreiden suoritusjärjestys 899 E: Esimerkkiprojekti 903 Hahmotelma 903 Projektin määrittelyn parantelu 905 Suunnittelijan huomiot 905 Henkilo-luokka 906 Periytetyt luokat Opiskelija ja Opettaja 906 Säiliö 906 Tietojen talletus ja palautus 907 Yhteenveto 907 Hakemisto 909 xviii

21 Sisältö xix

22 xx C++ Ohjelmoijan käsikirja

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.

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. 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

Lisätiedot

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

C++ Ohjelmoijan käsikirja. Hakemisto. #ifdef 394 #ifndef 394, 396 ympäristön tuki 396 koodi, monistamisen välttäminen Hakemisto Symbolit!, looginen NOT 127,129!=, vertailuoperaattori 111, 207 # operaattorin uudelleenmäärittely 534 esikäsittelijän komennot 383 merkkijonon korvaus, esikäsittelijän makrot 391 ## useammat

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Virtuaalifunktiot ja polymorfismi

Virtuaalifunktiot ja polymorfismi Virtuaalifunktiot ja polymorfismi 16 Virtuaalifunktiot ja polymorfismi Polymorfismi on niin tehokas olio-ohjelmoinnin ominaisuus, että tulet varmastikin käyttämään sitä lähes kaikissa C++-ohjelmissasi.

Lisätiedot

Periytyminen. Luokat ja olio-ohjelmointi

Periytyminen. Luokat ja olio-ohjelmointi Periytyminen 15 Periytyminen Tässä luvussa käsittelemme aihetta, joka on olio-ohjelmoinnin kaikkein tärkein osa - periytyvyys. Periytyvyyden avulla voimme luoda uusia luokkia uudelleenkäyttämällä ja laajentamalla

Lisätiedot

Mallit standardi mallikirjasto parametroitu tyyppi

Mallit standardi mallikirjasto parametroitu tyyppi Mallit 18 Mallit Malli on tehokas mekanismi uusien luokkien generoimiseksi automaattisesti. Standardikirjaston suuri osa, standardi mallikirjasto, rakentuu kokonaan mallien määrittelymahdollisuuden ympärille,

Lisätiedot

Algoritmit C++ Kauko Kolehmainen

Algoritmit C++ Kauko Kolehmainen Algoritmit C++ Kauko Kolehmainen Algoritmit - C++ Kirjoittanut Taitto Kansi Kustantaja Kauko Kolehmainen Kauko Kolehmainen Frank Chaumont Oy Edita Ab IT Press PL 760 00043 EDITA Sähköpostiosoite Internet

Lisätiedot

Operaattoreiden uudelleenmäärittely

Operaattoreiden uudelleenmäärittely Operaattoreiden uudelleenmäärittely 14 Operaattoreiden uudelleenmäärittely Tässä luvussa käsittelemme, kuinka voit lisätä toiminnallisuutta luokkiisi, jotta ne toimivat enemmän C++:n perustietotyyppien

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Ohjelman virheet ja poikkeusten käsittely

Ohjelman virheet ja poikkeusten käsittely Ohjelman virheet ja poikkeusten käsittely 17 Ohjelman virheet ja poikkeusten käsittely Poikkeukset ovat tapa ilmoittaa virheistä ja odottamattomista tilanteista C++-ohjelmassasi. Poikkeusten käyttö virheiden

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Osoittimet. Mikä on osoitin?

Osoittimet. Mikä on osoitin? Osoittimet 7 Osoittimet On aika siirtyä käsittelemään osoittimia, C++:lle elintärkeätä ominaisuutta. Osoittimet ovat tärkeitä, koska ne luovat perustan muistin dynaamiselle varaukselle ja käytölle. Ne

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Standardi mallikirjasto

Standardi mallikirjasto Standardi mallikirjasto 20 Standardi mallikirjasto Kuten jo tiedätkin C++ sisältää laajan standardikirjaston, joka yksinkertaistaa monia ohjelmointitehtäviä. Tähän saakka näkemäsi lisäksi tämä kirjasto

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

Lisätiedot

12 Mallit (Templates)

12 Mallit (Templates) 12 Mallit (Templates) Malli on määrittely, jota käyttämällä voidaan luoda samankaltaisten aliohjelmien ja luokkien perheitä. Malli on ohje kääntäjälle luoda geneerisestä tyyppiriippumattomasta ohjelmakoodista

Lisätiedot

Omat tietotyypit. Mikä on olio?

Omat tietotyypit. Mikä on olio? Omat tietotyypit 11 Omat tietotyypit C++:n suuri vahvuus on sen oliopohjaisuudessa. Siihen liittyy runsaasti asiaa ja kulutammekin seuraavat viisi lukua tässä aiheessa. Tässä ja seuraavassa luvussa käsittelemme

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

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

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi 1 C++11 Syntaksi Jari-Pekka Voutilainen 13.4.2012 2 Range-for Iteroi säiliön kaikki alkiot for-silmukassa. Säiliöltä vaaditaan begin- ja end-iteraattorit. Pätee kaikille C++11 STL-säiliöille, taulukoille,

Lisätiedot

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

Luokat. Luokat ja olio-ohjelmointi

Luokat. Luokat ja olio-ohjelmointi Luokat 12 Luokat Tässä luvussa laajennamme edellisessä luvussa käsittelemäämme struktuurityyppiä ja siirrymme yhteen C++-ohjelmoijan kaikkein tärkeimmistä välineistä: luokkiin. Käsittelemme myöskin joitakin

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 V Abstraktit tietotyypit ja olioohjelmointi Sisältö I. Abstraktit tietotyypit II. 1. Johdatus abstrakteihin tietotyyppeihin 2. Abstraktit tietotyypit Adassa

Lisätiedot

Kielioppia: toisin kuin Javassa

Kielioppia: toisin kuin Javassa Object Pascal Pascal kielen oliolaajennus (Inprise/Borland:n oma) luokat Voit uudelleenkäyttää luomiasi objekteja esim. komponentteja Periytyminen Kielioppia: toisin kuin Javassa Ei eroa isojen ja pienien

Lisätiedot

13 Operaattoreiden ylimäärittelyjä

13 Operaattoreiden ylimäärittelyjä 248 13 C++-kielessä voidaan operaattoreita ylimäärittää. Ylimääriteltävää operaattoria voidaan pitää ikäänkuin metodina, joka esitellään luokan esittelyssä ja määritellään luokan ulkopuolella kuten metoditkin.

Lisätiedot

Perusasiat. Mitkä ovat C++-ohjelman perusosat. Miten lähdeteksti kommentoidaan. Miten lähdetekstistä tulee suoritettava ohjelma

Perusasiat. Mitkä ovat C++-ohjelman perusosat. Miten lähdeteksti kommentoidaan. Miten lähdetekstistä tulee suoritettava ohjelma Perusasiat 1 Perusasiat Tässä ensimmäisessä luvussa käsittelemme C++:n perusominaisuuksia. Kaikkiin tässä käsiteltäviin asioihin palataan tarkemmin myöhemmissä luvuissa - tarkoituksena on nyt vain hieman

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

TIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä TIE-20200 Ohjelmistojen suunnittelu Luento 8..9: moniperintä 1 Ajankohtaista Harjoitustyön suunnittelusessiot pidetty, työt jatkuvat, välivaiheen esittely seuraavana Viimeinen viikkoharjoituskerta, palataan

Lisätiedot

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä 10.11.2002 Projektiryhmä Keimo keimo-dev@list.hut.

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä 10.11.2002 Projektiryhmä Keimo keimo-dev@list.hut. T-76.115 Tietojenkäsittelyopin ohjelmatyö Sisältö Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä 10.11.2002 Projektiryhmä Keimo keimo-dev@list.hut.fi Kirjoittajat

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot C! : Moniulotteiset taulukot & Bittioperaatiot 15.3.2016 Agenda Pieni kertausharjoitus Moniulotteiset taulukot Esimerkki taulukoista Tauko (bittitehtävä) Binäärioperaatioista Esimerkki (vilkaistaan IP

Lisätiedot

Luokan operaatiot. Osoittimet ja viittaukset luokan olioihin

Luokan operaatiot. Osoittimet ja viittaukset luokan olioihin Luokan operaatiot 13 Luokan operaatiot Luokkien olioiden luomiseen ja tuhoamiseen liittyy monia hienouksia, joista sinun tulee olla selvillä, jotta luokkiesi olioiden operaatiot toimivat turvallisesti

Lisätiedot

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

Lisätiedot

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa ssa ohjelman käytössä suoritusaikana oleva muisti jakautuu neljään osaan: koodisegmentti datasegmentti pinosegmentti (stack) kasa (heap) ssa ohjelman koodisegmentti sisältää käännetyn ohjelmakoodin sisältö

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,

Lisätiedot

812341A Olio-ohjelmointi, I Johdanto

812341A Olio-ohjelmointi, I Johdanto 812341A Olio-ohjelmointi, 2016 I Johdanto Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden kertausta 812341A Olio-ohjelmointi, Johdanto 2 1 Abstraktiosta

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

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

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: 1. Luokan jäsenet Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: class luokan_nimi tyypit: enum, struct, class, typedef

Lisätiedot

C++ Ohjelmoijan käsikirja. Johdanto

C++ Ohjelmoijan käsikirja. Johdanto Johdanto C++ Ohjelmoijan käsikirja Johdanto Tervetuloa Inside C++-kirjan pariin. Tämä on opaskirja standardi C++:n käyttöön. Käsittelemme kirjassa kaikki syntaksin, kieliopin, olio-ohjelmoinnin ja standardikirjastojen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Valinnat ja päätökset

Valinnat ja päätökset Valinnat ja päätökset 4 Valinnat ja päätökset Päätöksenteko on erittäin tärkeässä asemassa kaikissa ohjelmointikielissä. Jos ohjelman lauseiden suoritusjärjestystä ei voitaisi muuttaa tietojen vertailun

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Perustietotyypit ja laskutoimitukset

Perustietotyypit ja laskutoimitukset Perustietotyypit ja laskutoimitukset 2 Perustietotyypit ja laskutoimitukset Tässä luvussa käsittelemme C++:n perustietotyyppejä, varsinkin sellaisia kuin sinä mitä todennäköisemmin tulet käyttämään omissa

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Muutamia peruskäsitteitä

Muutamia peruskäsitteitä Muutamia peruskäsitteitä Huom. 1: nämä peruskäsitteet eivät muodosta hyvin määriteltyä keskenään yhteensopivien käsitteiden joukkoa, vaan käsitteet ovat osittain päällekkäisiä ja eri yhteyksissä niillä

Lisätiedot

Ohjelmointi funktioiden avulla

Ohjelmointi funktioiden avulla Ohjelmointi funktioiden avulla 8 Ohjelmointi funktioiden avulla Ohjelman jakaminen hallittaviin osiin on idea, joka on perustana kaikille ohjelmointikielille. Funktio on kaikkien C++-ohjelmien perusosa.

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Loppukurssin järjestelyt C:n edistyneet piirteet

Loppukurssin järjestelyt C:n edistyneet piirteet C! Loppukurssin järjestelyt C:n edistyneet piirteet 30.3.2017 Ohjelmassa Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Esikääntäjä Parametrilistat Funktio-osoittimet Kunniamainintoja Kuura

Lisätiedot

Binäärioperaatiot Tiedostot ja I/O

Binäärioperaatiot Tiedostot ja I/O C! Binäärioperaatiot Tiedostot ja I/O 16.3.2017 Tiedotteita Määräaikoja pidennetty Myös 7. kierros uudestaan auki perjantaihin asti Seuraava ja viimeinen luento 30.3. Makrot, funktio-osoittimet Kokeen

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto

Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto Tässä materiaalissa tutustutaan tarkemmin C++:n luokkahierarkiaan. Koska kyseessä on oliopohjainen kieli, C++:n luokat on järjestetty hierarkisesti

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Lisää perustietotyypeistä

Lisää perustietotyypeistä Perustietotyypit ja laskutoimitukset 3 Lisää perustietotyypeistä Tässä luvussa käsittelemme lisää jo edellisessä luvussa käsittelemiämme perustietotyyppejä. Näemme, kuinka eri tyyppiset muuttujat vaikuttavat

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma 5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus? Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä Objective-C Ryhmä 35: Ilpo Kärki Aleksi Pälä Sisällysluettelo 1 Yleistä...3 1.1 Lyhyesti...3 1.2 Historiaa...3 1.3 Hybridikieli...3 2 Muistinhallinta...5 2.1 Manual Retain Release (MRR)...5 2.2 Automatic

Lisätiedot

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin 812347A Olio-ohjelmointi, 2015 syksy 2. vsk II Johdanto olio-ohjelmointiin Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden esittely 2 II.1 Abstraktiosta

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

Lisätiedot