C++ - Contents
Lukijalle
Oliopohjainen suunnittelu ja ohjelmointi
Oliosuunnittelu
Tavoitteet
Mutkikkuuden hallinta
Semanttiset verkot ja käsitemallit
Oliosuunnittelu ja määrittely
Olio- ohjelmointi
Oliot, luokat ja metodit
Tietoabstraktiot ja tiedon piilottaminen
Oliot ja arvot
Periytyminen
Periytymisen semantiikka
Periytymishierarkia
Tehtävä 1.1 Periytymishierarkia
Yksiperintä ja moniperintä
Tehtävä 1.2 Moniperintä
Oliopohjaisuuden edut
Polymorfismi eli monimuotoisuus
Varhainen ja myöhäinen sidonta
Oliopohjaiset ohjelmointikielet
C++:n tärkeimmät erot C- kieleen
Yleisiä uudistuksia
Yhden rivin kommentti
Tehtävä 1.1 Kommentit makroissa
Vakiot (const)
Tehtävä 1.2 Miksi const parempi kuin #define
Funktiot
Parametrin tyypitys pakollista
Tehtävä 1.3 Miksi tyypitys on tärkeä
Tyhjä parametrilista on void
Kuormitus (lisämäärittely, overloading, polymorphism)
Tehtävä 1.4 Ero palautustyypissä
Oletusparametrit (default arguments)
Tehtävä 1.5 Oletusarvot
Inline- funktiot
Tehtävä 1.6 Miksi inline- funktio on parempi kuin makro?
Funktiomallit (funktiomuotti, function template)
Tehtävä 1.7 Funktiomalli
Tietovirrat (io- stream)
Formatointi tietovirtoihin
IO- manipulaattorit
Tietovirtojen lisämäärittely
Tietovirrat ja merkkijonot
Tiedostot ja tietovirrat
Tehtävä 1.8 Tiedostot
Luokat (class)
typedef määritystä ei tarvita
Tietueessa funktioita (method, member function)
this- osoitin
Tehtävä 1.9 Tietovirrat
Tehtävä 1.10 Kumpi parempi?
Alkioiden suojaukset
Luokat (class)
Tehtävä 1.11 Private- suojaus
Tehtävä 1.12 Suojattujen tietojen palautus
Muodostaja (constructor) ja hajottaja (destructor)
Muuttujista
Viittaukset (viitemuuttujat, references,&)
Muuttujien esittely kesken koodin
Muistinkäsittely (new, delete)
Muodostajan ja hajottajan kutsuminen
Tehtävä 1.13 new:llä luotu ei häviä itsekseen!
Luokkamuuttujat
Tehtävä 1.14 Luokkamuuttujat
Perintä (inheritance)
IS_A
Perinnän esimerkki
Tehtävä 1.15 Virtual
Tehtävä 1.16 Neliö
Tehtävä 1.17 Väri ja asento
Luokan esittely ja konstruktorin "kutsuminen"
const - metodit => *this pysyy vakiona
Yliluokan metodin kutsuminen
Virtuaaliset metodit
Olio- osoittimet ja virtuaaliset funktiot (=polymorfismi)
Miksi pitää olla virtuaalinen hajottaja?
Tehtävä 1.18 Miksi metodit virtuaalisiksi
Sekasijoitukset
Tehtävä 1.19 Miksi näkyvyyden muuttuminen on väärin
RTTI (Run Time Type Information)
Miksi polymorfismi ja dynaamiset oliot ovat tärkeitä?
Tehtävä 1.20 Olio- osoittimet
Ystävät
Ystäväfunktiot (friend functions)
Tehtävä 1.21 Jäsenfunktio ja ystävä
Ystäväluokka
Tehtävä 1.22 Inline ei aina onnistu
Tehtävä 1.23 Uuden ystävän lisääminen
Perinnän muodot ja moniperintä (multiple inheritance)
Luokan jäseninä muita luokkia (member objects), koostaminen
Tehtävä 1.24 Kutsujärjestys
Peritään suoraan useampia luokkia
Tehtävä 1.25 Kutsujärjestys
Tehtävä 1.26 Asuntolaiva
Monitasoinen perintä
Sama perusluokka (base class) = pahin ongelma
Virtuaalinen perintä
Voidaanko tehdä virtuaalisesti perittyjä apuluokkia
Virtuaalinen perintä aikaisemmaksi
Koostaminen
Tehtävä 1.27 Kokonaan koostettu ympyräneliö
Operaattorit ja referenssit
Operaattori- funktiot
Tehtävä 1.28 Miksi sijoituksen määrittely
Tehtävä 1.29 Ylimääräiset muuttujat operaattoreissa
Tehtävä 1.30 Lisää operaatiota
Tehtävä 1.31 Luokka 2x2 matriiseille
Referenssin palauttaminen
Tehtävä 1.32 Referenssin palauttaminen
Omien luokkien käsittely tietovirrassa
Tehtävä 1.33 Extractor
Template- luokan esittelyssä (class template)
Miksi luokkamallia tarvitaan?
Tehtävä 1.34 Lineaarinen lista
Luokkamalli (class template)
Tehtävä 1.35 Template ja luokat
C ja C++ - kielien yhteiskäyttö
C- funktioiden käyttö
C++ funktioiden kutsuminen C- kielestä
Poikkeusten käsittely (exeption handling)
Virheiden käsittely C- kielen ehdoilla
Purkaminen hajottajan avulla
Tehtävä 1.36 Rakenteiden purkaminen hajottajan avulla
throw, try ja catch
Tehtävä 1.37 Virhekäsittely throw:n avulla
Nimiavaruus (namespace)
C++ vaarat
Kirjoitusvirheitä
Puolipiste puuttuu
Luokan nimi jää pois kutsusta
Perintä (inheritance)
Private attribuutit eivät näy
Hyvien luokkien keksiminen vaikeata
Mitä tapahtuu kulissien takana
Perittävän muodostajan kutsuminen
Virtuaaliset metodit
Olio parametrina ja olion sijoittaminen
Olio parametrina
Olioiden sijoittaminen
Olion palauttaminen funktion arvona
Opetus
Olion attribuutin osoitteen tai referenssin palauttaminen
C++ ja valmiit luokkakirjastot
Merkkijonoluokka string
Tehtävä 1.1 string- luokan muuttaminen
Säiliöluokat (container, varasto)
Esimerkki yhden container- luokan käytöstä
Säiliöluokan vaihtaminen
Eri luokkia
Tehtävä 1.2 Kaksipäinen jono
Binääripuu
STL = Standard Template Library
Yksinkertainen listaesimerkki
Järjestetty joukko
Assosiatiivinen taulukko
Algoritmit
Tehtävä 1.3 foreach
APF - ohjelmarunko
Mikä on APF (Application Framework)
Ei standardia
Edut ja haitat
Yleisiä luokkia
"MopoCad"- esimerkki
Toiminta ja toiminnot
Eri versioiden yhteiset tiedostot
Otsikkotiedosto komennoille
Resurssitiedosto
Autolaskuri-esimerkki
LAF (Little Application Framework)
OWL 5.0
Pääluokat
Yksinkertainen esimerkki: hello.cpp
Piirtäminen ikkunaan
Viestien käsittely
owl5\laskuri.cpp
Tehtävä 5.43 cLaskuri
owl5\mopocad.cpp
Tehtävä 5.44 cKuvioLista
OWL 5.0 luokkahierarkia (osa)
Windows++
Pääluokat
Viestien käsittely
Muita ideoita
Esimerkit
Windows++ - luokkahierarkia
MicroSoft MFC
mfc\hello.cpp
Tehtävä 5.45 Automaattinen ikkunan näyttäminen
mfc\hello2.cpp
mfc\laskuri.cpp
mfc\mopocad.cpp
Pieni oliosanasto: englanti- suomi
Kirjallisuutta ja materiaalia