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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 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 tiedot: const, static aliohjelmat: static, inline, const, virtual ystävät: friend ; Luokassa esiteltävät tietojäsenet voivat olla oliokohtaisia tai luokkakohtaisia. Jokaisella luokkaa luodulla oliolla on omat oliokohtaiset tietonsa, joita voi normaalisti käsitellä vain olio itse luokkansa aliohjelmilla (esimerkiksi suorakulmio-luokka ja sen aliohjelmat). Luokkakohtaiset tiedot ovat kaikkien saman luokan olioiden käytettävissä. Tarkastellaan seuraavaksi luokan tieto- ja aliohjelmajäseniä tarkemmin. 1.1 Luokan tietojäsenet Olion tiedot Olion tietojen muistinvarausluokka voi olla sama kuin olion muistinvarausluokka tai olion tiedot voivat olla dynaamisia. Ilman osoittimia esiteltyjen tietojen muistinvarausluokka on sama kuin itse olion muistinvarausluokka. Dynaamisia tietoja käsiteltäessä luokassa on esiteltävä osoitinmuuttuja. Tietojäsenten ja olion tunnuksen muistinvarausluokkaa ei pidä sekoittaa keskenään. laatikko a; //automaattinen olio laatikko=*b new laatikko; //dynaaminen olio static laatikko c;//staattinen olio static laatikko *d new laatikko; staattinen olio Luokan tiedot

2 Luokan tiedot (static data members) ovat luokkakohtaisia tietoja, jotka eivät kuulu millekään oliolle luokassa. Kaikilla luokan olioilla on yhtäläiset oikeudet käsitellä luokkakohtaisia tietoja. Luokkakohtaiset tiedot esitellään avainsanalla static. Luokkakohtaisen tiedon esittely: class Luokka static tyyppi nimi;... ; Luokkakohtaisen olion näkyvyyssäännöt ovat samat kuin oliokohtaisten tietojen näkyvyyssäännöt. Jos static-tietojäsen esitellään private-sanan jäljessä, sitä voi käyttää vain luokan aliohjelmissa. Tyypillinen luokkakohtaisen tiedon käyttötarkoitus on pitää kirjaa luotujen olioiden määrästä. Silloinhan tieto ei voi liittyä mihinkään yksittäiseen olioon vaan itse luokkaan: Ohessa luokan Henkilo esittely: class Henkilo char etunimi[15]; char sukunimi[25]; static int lkm; ; lkm voi sisältää esimerkiksi luotujen Henkilö-tyyppisten olioiden lukumäärän. Muuttujan lkm arvoa voidaan muuttaa muodostimessa ja hajottimessa, esimerkiksi: Henkilo::Henkilo() lkm++; Henkilo::~Henkilo() lkm--;

3 Tässä tilanteessa luokkakohtainen muuttuja on alustettava nollaksi ennen pääohjelmaa, eli ennen kuin yhtään Henkilö-oliota on luotu: int Henkilo::lkm=0; int main() Henkilo herra47; //Kutsutaan oletusmuodostinta, lkm kasvaa yhdellä... Tehtävä: Lisää edellisellä tunnilla tehtyyn suorakulmioluokkaan muuttuja, joka ilmaisee, montako suorakulmiota on luotu. 1.2 Aliohjelmajäsenet Luokassa esitellyt aliohjelmat on tarkoitettu oliokohtaisten tai luokkakohtaisten tietojen käsittelyä varten. Ryhmittelemme luokassa esiteltävät aliohjelmat käsittelyn -Oliokohtaisia tietoja käsittelevät aliohjelmat -Muodostimet -Hajotin -Sijoitusoperaattori (alustus tilanvarauksen jälkeen) -Muut ohjelmoijan määrittelemät aliohjelmat, voidaan käyttää lisämääreitä inline, const ja virtual -Luokkakohtaisia tietoja käsittelevät aliohjelmat -esiteltävä varatulla sanalla static, voidaan käyttää lisämääreitä inline ja const Inline-aliohjelmat luokan jäseninä inline-aliohjelma luokan jäsenenä on aliohjelma, joka on toteutettu suoraan esittelyn yhteydessä tai jonka määrittely alkaa varatulla sanalla inline. Inline-aliohjelmia käytetään yleensä lyhyissä aliohjelmissa. joiden suoritusaikaa halutaan optimoida. Sen suoritus on nopeampaa kuin tavallisen aliohjelman, koska kääntäjä korvaa aliohjelman kutsun aliohjelman rungolla käännösaikana. class Luokka tyyppi Aliohjelma1( )... inline tyyppi Aliohjelma2( )... inline tyyppi Aliohjelma3( ) ;

4 inline tyyppi Luokka::Aliohjelma3( )... Aliohjelma1 on automaattisesti inline-aliohjelma, koska sen runko on toteutettu suoraan esittelyn yhteydessä. Samoin Aliohjelma2. Sen kohdalla inline-sanaa ei välttämättä tarvittaisi. Aliohjelma3:n esittelyssä ja määrittelyssä on varattu sana inline. Esittelyssä varatun sanan käyttö ei ole pakollista. Aliohjelman toteutus voidaan kirjoittaa luokan määrittelyn jälkeen. Tarkastellaan edellistä Henkilö-luokkaa. Lisätään sinne inline-aliohjelma, joka palauttaa etunimi-kentän arvon: class Henkilo char etunimi[15]; char sukunimi[25]; static int lkm; char *Etunimi() return etunimi; ; Vastaavasti pääohjelmassa: int main() Henkilö herra47; //Kutsutaan oletusmuodostinta, lkm kasvaa yhdellä cout << Etunimi oli << herra47.etunimi();... Inline-aliohjelman esittely ja toteutus erikseen: class Henkilo char etunimi[15]; char sukunimi[25]; static int lkm; char *Etunimi(); ; inline char *Henkilo::Etunimi() return etunimi;

5 Tehtävä: Muuta suorakulmio-luokan naytamitat ja laskeala inline-funktioiksi Vakioaliohjelmat Vakioaliohjelma ei voi muuttaa olion tietoja. Tällaisia ovat olion tilasta kertovat aliohjelmat. Vakioaliohjelmaksi voidaan esitellä esimerkiksi tietojäsenen arvon palauttava aliohjelma. Aliohjelma esitellään vakioksi kirjoittamalla const aliohjelman esittelyssä loppuun ennen esittelyn päättävää puolipistettä. Tällä varmistetaan, että aliohjelma ei voi sisältää operaatioita, joilla voisi muuttaa olion tietojäseniä. tyyppi Aliohjelma(parametrit) const; Olemme jo käyttäneet vakioaliohjelmia, esimerkiksi suorakulmio-luokan yhteydessä: double laskeala() const; double suorakulmio::laskeala() const return korkeus*leveys; Jos vakioaliohjelma palauttaa return-lauseella olion tiedon kutsuvalle ohjelmalle, on päätettävä, onko kutsuvalla ohjelmalla oikeus muuttaa saamaansa tietoa. Jos ei ole, on aliohjelman tyypin edessä oltava myös sana const. Esimerkiksi edellisen laskeala()-funktiota kutsuvan ohjelman ei oleteta muuttavan pintaalaa. Siksi kannattaa määritellä myös paluuarvo vakioksi: const double laskeala() const; const double suorakulmio::laskeala() const return korkeus*leveys; Vakioparametri Varattua sanaa const voidaan myös käyttää aliohjelmien parametrien välityksessä ja aliohjelmien palauttaman tiedon yhteydessä. Jos parametrin esittelyssä on varattu sana const, ei aliohjelma voi muuttaa parametrin sisältöä. Vakioparametrin esittely:

6 tyyppi Aliohjelma(const parametri); Lisätään edellä käsiteltyyn Henkilö-luokkaan aliohjelma VaihdaEtunimi, joka nimensä mukaan vaihtaa olion etunimi-tietojäsenen arvon. Aliohjelmalle välitetään vakiotyyppiä oleva merkkijono: class Henkilo char etunimi[15]; char sukunimi[25]; void VaihdaEtunimi(const char *); ; void Henkilo::VaihdaEtunimi(const char *p) strcpy(etunimi,p); int main() Henkilo herra47;... char uusinimi[15]= Maija ; herra47.vaihdaetunimi(uusinimi);... return 0; Tehtävä: Lisää suorakulmioluokkaan vakioparametria käyttävä aliohjelma, joka muuttaa olemassa olevan olion leveyttä ja korkeutta Vakio-oliot Aliohjelmat voivat saada parametrina olion. Parametrina saatu olio voidaan määritellä vakio-olioksi. Tällöin vakio-olio parametrina saanut aliohjelma ei voi kutsua vakio-olion kautta muita kuin luokan vakioaliohjelmia. Tämän tyyppinen olio on käsitelty kopiomuodostimen yhteydessä: class laatikko double leveys; double korkeus;

7 static int lkm; laatikko();//oletusmuodostin laatikko(double,double);//parametrillinen muodostin laatikko(laatikko const &);//kopiomuodostin ~laatikko(); void asetamitat(); void naytamitat() const; double laskeala() const; ; laatikko::laatikko(laatikko const &p) cout << "Kopiomuodostinta kutsuttu!" << endl; cout << "Olion osoite " << this << endl; leveys=p.leveys; korkeus=p.korkeus; lkm++; Tehtävä: Lisää suorakulmio-luokkaan aliohjelma, joka vertaa kahden suorakulmion pinta-aloja. Toinen suorakulmio välitetään aliohjelmaan vakio-oliona Luokkakohtaisia tietoja käsittelevät static-aliohjelmat Static-aliohjelmat on tarkoitettu luokkakohtaisten tietojen käsittelyä varten. Ne eivät voi käsitellä minkään yksittäisen olion yksityisiä tietojäseniä. Static-aliohjelmaan liittyviä sääntöjä: Esittely alkaa static-määreellä Static-aliohjelmassa ei voi käyttää this-osoitinta Static-aliohjelmassa ei voi käsitellä suoraan minkään olion tietojäseniä Static-aliohjelma ja oliokohtaisia tietojäseniä käsittelevä aliohjelma eivät saa esiintyä luokassa samalla nimellä ja samoilla parametreilla. static-aliohjelman esittely: static tyyppi Aliohjelma(parametrit); Aliohjelman esittelyn edessä on varattu sana static. Muuten aliohjelman esittely vastaa tavallista olion tietoja käsittelevän aliohjelman esittelyä. Jatketaanpa vanhan kunnon laatikko-luokan tarkastelua vielä hetki. Laatikko-luokan määrittely näyttää tältä: class laatikko double leveys; double korkeus; static int lkm; laatikko();//oletusmuodostin

8 ; laatikko(double,double);//parametrillinen muodostin laatikko(laatikko const &);//kopiomuodostin ~laatikko(); void asetamitat(); void naytamitat() const; double laskeala() const; static int lukumaara(); Viimeisellä rivillä on esitelty luokan staattinen aliohjelmajäsen lukumaara(), jonka avulla voidaan selvittää luotujen laatikoiden lukumäärä. Aliohjelman runko on seuraavan näköinen: int laatikko::lukumaara() return lkm; Eli ei kovin kummoinen. Se siis palauttaa luokan yksityisen staattisen tietojäsenen lkm arvon. Miksi lukumaara-aliohjelma sitten piti tehdä? Siksi, että koska lkm on luokan yksityinen jäsen, siihen ei olio-ohjelmoinnin periaatteiden mukaisesti pääse käsiksi kuin luokan omilla aliohjelmilla. Nyt laatikoiden lukumäärä saadaan pääohjelmassa selville seuraavasti: int main() laatikko x;//oletusmuodostin laatikko *y = new laatikko; laatikko z; cout << "Laatikoita on " << laatikko::lukumaara() << " kappaletta." << endl; delete y; return 0;

9 Static-aliohjelmaa voidaan siis kutsua joko suoraan aliohjelman nimellä tai olion tunnuksen kautta: Luokka::Aliohjelma(); Olio.Aliohjelma(); Olio->Aliohjelma(); Ensimmäistä versiota voidaan käyttää aina static-aliohjelman kutsussa. Toisella rivillä olevaa muotoa voidaan käyttää silloin, kun aiohjelmaa kutsutaan automaattisesti luodun olion kautta. Kolmannella rivillä olevaa muotoa voidaan käyttää dynaamisesti luodun olion yhteydessä. Vaikka kutsun yhteydessä esiintyisi olion tunnus, ei static-aliohjelma voi sisältää viittauksia olion tietojäseniin. Järjestelmä ei siis käytännössä huomioi olion tunnusta. Tehtävä: Lisää laatikko-luokkaan tieto- ja aliohjelmajäsenet, joiden avulla pidetään kirjaa luokkaan luotujen laatikko-olioiden pinta-alojen keskiarvosta. Keskiarvoa tulee päivittää aina, kun uusi olio luodaan tai tuhotaan. Luokassa tulee olla aliohjelma, jolla voidaan selvittää laatikoiden keskimääräinen pinta-ala. 2. Dynaamisten tietojäsenten käsittely Dynaaminen tietojäsen tarkoittaa tietojäsentä, jolle varattavan muistitilan koko vaihtelee oliokohtaisesti. Se toteutetaan osoittimen ja dynaamisen muistinhallinnan avulla new- ja delete-operaattoreilla. Tilanvaraus tehdään yleensä olion alustuksen yhteydessä muodostimessa ja vapautus hajottimessa. Dynaamisten tietojäsenten varaamat tilat eivät vapaudu automaattisesti olion tuhoutumisen yhteydessä, koska C++-kielessä ei ole automaattista muistinhallintaa. Jos olio tuhotaan tietojäsenten tilaa vapauttamatta, jäävät tietojäsenet keskusmuistiin, vaikka niihin ei enää olisi käytössä olevaa osoitinta. Ohjelmoijan on siis itse toteutettava muodostimet, hajotin ja sijoitusoperaattori. Huomaa, että dynaamisia tietojäseniä voi olla kaikilla oliolla riippumatta olion muistinvarausluokasta! 2.1 Dynaamisten tietojäsenten alustus oletusarvoilla ja oletusmuodostin Seuraavassa esimerkissä on yksinkertainen Henkilo-luokan toteutus, jossa tietojäsenet sukunimi ja etunimi ovat dynaamisia. Ohjelma ei oikeastaan tee vielä yhtään mitään, se luo oletusmuodostimessa kaksi tyhjää merkkijonoa ja tuhoaa ne sitten:

10 #include <iostream> using namespace std; class Henkilo char *etunimi; char *sukunimi; Henkilo() etunimi=null;sukunimi=null; ~Henkilo(); ; Henkilo::~Henkilo() if (etunimi) delete [] etunimi; etunimi=null; if (sukunimi) delete [] sukunimi; sukunimi=null; cout << "Tuhottiin Henkilo-olio osoitteesta " << this << endl; int main() Henkilo x; return 0; 2.2 Dynaamisten tietojäsenten alustus parametrillisella muodostimella Lisätään ohjelmaan parametrillinen muodostin, jonka avulla Henkilo-oliolle saadaan annettua nimi, sekä Näytä-metodi, jonka avulla nimi voidaan näyttää. class Henkilo char *etunimi; char *sukunimi; Henkilo() etunimi=null;sukunimi=null; Henkilo(const char *, const char *); void Nayta() const if (etunimi sukunimi) cout << etunimi << " " << sukunimi << endl;

11 ~Henkilo(); ; Parametrillinen muodostin siis ottaa parametrina kaksi vakiomerkkijonoa (tyyppiä const char *). Nayta()-aliohjelma on kirjoitettu inline-tyyppisenä, joka toisaalta nopeuttaa aliohjelman suoritusta, mutta voi vaikuttaa hieman sotkuiselta. Sama asia voitaisiin tehdä kirjoittamalla luokan määrittelyyn ainoastaan void Nayta() const; ja sitten varsinainen funktion runko erikseen: Henkilo::Nayta() const if (etunimi sukunimi) cout << etunimi << << sukunimi << endl; Edellä oleva if-lause voitaisiin kirjoittaa muotoon if (etunimi!=null sukunimi!=null) Parametrillisen muodostimen toteutus on esitetty alla. Muodostin varaa uusien olioiden dynaamisille tietojäsenille keskusmuistitilaa tilanvarauksen verran. Muodostin tutkii strlen-aliohjelmalla parametreina saatujen merkkijonojen pituudet. Koska strlen ei laske pituuteen mukaan merkkijonon lopetusmerkkiä, on varattavan tilan pituuteen lisättävä 1. Henkilo::Henkilo(const char *en, const char *sn) int pituus1=strlen(en)+1; int pituus2=strlen(sn)+1; etunimi=new char[pituus1]; strcpy(etunimi,en); sukunimi=new char[pituus2]; strcpy(sukunimi,sn); cout << "Luotiin Henkilo-olio osoitteeseen " << this << endl; Pääohjelma näyttää nyt seuraavalta: int main() Henkilo x( Jukka, Jauhiainen ); x.nayta(); return 0;

12 jolloin ohjelma tulostaa: 2.3 Dynaamisten tietojäsenten muuttaminen Lisätään seuraavaksi metodi, jonka avulla nimeä voi muuttaa: class Henkilo char *etunimi; char *sukunimi; Henkilo() etunimi=null;sukunimi=null; Henkilo(const char *, const char *); void Nayta() const if (etunimi sukunimi) cout << etunimi << " " << sukunimi << endl; void Muuta(); ~Henkilo(); ; Muuttamisessa syntyy ongelma. Hyvin todennäköisesti muutetut merkkijonot ovat joko pitempiä tai lyhyempiä kuin alkuperäiset. Siksi alkuperäiset tietojäsenet pitää ensin tuhota ja luoda uudet oikein mittaiset sen jälkeen, kun niiden pituudet on tiedossa: void Henkilo::Muuta() char en[30]; char sn[30]; if (etunimi) delete [] etunimi;

13 etunimi=null; if (sukunimi) delete [] sukunimi; sukunimi=null; cout << "Etunimi :" << endl; cin >> en; cout << "Sukunimi :" << endl; cin >> sn; int pituus1=strlen(en)+1; int pituus2=strlen(sn)+1; etunimi=new char[pituus1]; strcpy(etunimi,en); sukunimi=new char[pituus2]; strcpy(sukunimi,sn); Jos pääohjelma näyttää tältä int main() Henkilo x("jukka","jauhiainen"); Henkilo y; x.nayta(); y.muuta(); y.nayta(); return 0; niin ohjelma tulostaa Huomaa, että oletusmuodostin, joka luo olion y, ei tässä esimerkissä tulosta tietoa olion luonnista.

14 2.4 Dynaamisten tietojäsenten kopiointi oliosta toiseen ja kopiomuodostin Kokeillaanpa seuraavaksi suorittaa alla olevaa ohjelmaa. Tarkoituksena on, että olio y alustetaan olion x arvoilla. Tämä aiheuttaa kopiomuodostimen kutsun. Idiootti ohjelmoija ei ole sitä toteuttanut, joten kääntäjä generoi oletuskopiomuodostimen. Jos kopioitavan olion (tässä x) jokin tietojäsen on osoitinmuuttuja, kopioi muodostin osoitteen. Tämä aiheuttaa tilanteen, että sekä x:n että y:n tietojäsenet etunimi ja sukunimi osoittavat samoihin keskusmuistiosoitteisiin. Kun ohjelmassa muutetaan y:n arvoa, menee olio x sekaisin, koska sen arvot muuttuvat samalla, vaikka niin ei tietenkään pitäisi käydä! int main() Henkilo x("jukka","jauhiainen"); Henkilo y=x; x.nayta(); y.nayta(); y.muuta(); x.nayta(); y.nayta(); return 0; Ohjelman suoritus näyttää tältä:

15 Dynaamisia tietojäseniä sisältävillä olioille on siis AINA SYYTÄ KIRJOITTAA KOPIOMUODOSTIN, joka huolehtii siitä, että kopioitavat tiedot, eikä niiden osoitteet, kopioituvat! Tässä tapauksessa kopiomuodostin näyttäisi tältä: Henkilo::Henkilo(Henkilo const &p) int pituus1=strlen(p.etunimi)+1; int pituus2=strlen(p.sukunimi)+1; etunimi=new char[pituus1]; strcpy(etunimi,p.etunimi); sukunimi=new char[pituus2]; strcpy(sukunimi,p.sukunimi); cout << "Kopio Henkilo-oliosta luotiin osoitteeseen " << this << endl;

16 Eli kopioitava olio p viedään viittausparametrin välityksellä muodostimelle, tutkitaan tietojäsenten pituudet, luodaan uuden olion tietojäsenet ja kopioidaan vanhan olion arvot niihin. Pääohjelma on sama kuin edellä. Ohjelman suoritus näyttää nyt tältä. Kopiomuodostimen avulla olioon y todellakin kopioituu olion x tietojäsenten sisältö. 3. Operaattorien ylikuormaus Edellä Muuta()-aliohjelman avulla voitiin muuttaa olemassa olevan olion tietoja. Kopiomuodostimella voitiin luoda uusi olio ja kopioida vanhan olion tiedot siihen. Jos ohjelmassa halutaan sijoittaa jo olemassa olevan olion tiedot johonkin toiseen olemassa olevaan olioon, voidaan määritellä sijoitusoperaattori = siten, että yhtäsuuruusmerkin oikealla puolella olevan olion tietojäsenten sisällöt kopioituvat vasemmalla puolella oleviin vastaaviin tietojäseniin. Tässä tulee vastaan sama ongelma, mikä edellä Muuta()-aliohjelmassa, eli sen olion, johon kopioidaan, koko muuttuu. Siksi olion tietojäsenet on ensin tuhottava ja varattava sopivan kokoiset tilat ennen uusien tietojen sijoittamista. Lisätään luokkaan sijoitusoperaattori: class Henkilo char *etunimi; char *sukunimi; Henkilo() etunimi=null;sukunimi=null; Henkilo(const char *, const char *); Henkilo(Henkilo const &); Henkilo &operator=(const Henkilo &);

17 void Nayta() const if (etunimi sukunimi) cout << etunimi << " " << sukunimi << endl; void Muuta(); ~Henkilo(); ; Henkilo &Henkilo::operator = (const Henkilo &p) if (this == &p) return (*this); int pituus1=strlen(p.etunimi)+1; int pituus2=strlen(p.sukunimi)+1; delete [] etunimi; delete [] sukunimi; etunimi=new char(pituus1); strcpy(etunimi,p.etunimi); sukunimi=new char(pituus2); strcpy(sukunimi,p.sukunimi); return (*this);

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

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 11. Luokka Opetellaan seuraavaksi, miten omia luokkia kirjoitetaan. Aikaisemmin olikin jo esillä, että luokka on tietorakenne, joka sisältää sekä tiedot (attribuutit) että niitä käsittelevät aliohjelmat

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

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

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

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

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

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

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

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu: TL5302 Olio-ohjelmointi Koe 19.4.2005 Malliratkaisuja Tehtävä 1 Tässä sekä a)- että b)-kohdan toimiva ratkaisu: #include using namespace std; int main() int taul[5]=1,2,3,4,5; int *p,&r=taul[0];

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

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

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

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

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia. 4. Periytyminen 4.1. Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

Luokan muodostimet (Constructors)

Luokan muodostimet (Constructors) Mikä on muodostin? Luokan muodostimet (Constructors) Millaisia muodostimia on? Oletusmuodostin (Default Constructor) Parametrillinen muodostin Kopiointimuodostin (Copy Constructor) this-muuttuja Miten

Lisätiedot

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

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

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

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

14. oppitunti. Operaattorin ylikuormitus. Osa. Operaattorin ylikuormittaminen

14. oppitunti. Operaattorin ylikuormitus. Osa. Operaattorin ylikuormittaminen Osa IV 14. oppitunti Operaattorin ylikuormitus Edellisessä luvussa opit ylikuormittamaan metodeita ja luomaan kopiomuodostimen, joka tekee syvän kopion. Tässä luvussa käsitellään seuraavia aiheita: Kuinka

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout: C++ rautaisannos Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout: # include #include main ( ) main (

Lisätiedot

Olio-ohjelmointi 2. välikoe HYV5SN

Olio-ohjelmointi 2. välikoe HYV5SN Olio-ohjelmointi 2. välikoe 27.4.2007 HYV5SN 1. Tee ohjelma, joka sisältää laatikko-luokan. Luokan tietojäseninä ovat laatikon syvyys, leveys ja korkeus. Toteuta luokkaan muodostin, jonka avulla olio voidaan

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

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

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

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

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

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

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

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

19. Olio-ohjelmointia Javalla 19.1

19. Olio-ohjelmointia Javalla 19.1 19. Olio-ohjelmointia Javalla 19.1 Sisällys Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

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

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

Osa III. Edelliset kolme lukua ovat käsitelleet viittausten ja osoittimien käyttöä. Tämän luvun aiheita ovat:

Osa III. Edelliset kolme lukua ovat käsitelleet viittausten ja osoittimien käyttöä. Tämän luvun aiheita ovat: Osa III 12. oppitunti Kehittyneet viittaukset ja osoittimet Edelliset kolme lukua ovat käsitelleet viittausten ja osoittimien käyttöä. Tämän luvun aiheita ovat: Kuinka viittausten viemisellä voidaan tehostaa

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

UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE

UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE 1 UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE OPETUSMONISTEET SARJA C11 JUUSTILA ANTTI KETTUNEN HARRI KILPI TEEMU RÄISÄNEN TONI VESANEN ARI C++- OHJELMOINTIKURSSIN OHEISMATERIAALI ISBN

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

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus Sisällys 19. Olio-ohjelmointia Javalla Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

Rakenteiset tietotyypit Moniulotteiset taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen

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

Osa III. Olioiden luominen vapaalle muistialueelle

Osa III. Olioiden luominen vapaalle muistialueelle Osa III 10. oppitunti Kehittyneet osoittimet Eräs tehokkaimpia C++ -työkaluja on mahdollisuus käsitellä tietokoneen muistia suoraan osoittimien avulla. Tässä luvussa käsitelläänkin seuraavia aiheita: Kuinka

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

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

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

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on 1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on esiteltävä. char ch; int count=1; struct complex float re, im; complex z; complex sqrt( complex );

Lisätiedot

4. Olio-ohjelmoinista lyhyesti 4.1

4. Olio-ohjelmoinista lyhyesti 4.1 4. Olio-ohjelmoinista lyhyesti 4.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 4.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

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

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi. 1. Johdanto 1.1 Yleistä Suurten ohjelmien organisointi vaikeaa C:ssä. 1980 Stroustrup lisäsi C:hen olio-ohjelmoinnin (OOP = Object Oriented Programming). C C++: C-ohjelma on (muutamia poikkeuksia lukuunottamatta)

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Olio-ohjelmointi Olioperusteinen ohjelmointi C++-kielellä. 1. Johdanto

Olio-ohjelmointi Olioperusteinen ohjelmointi C++-kielellä. 1. Johdanto Olio-ohjelmointi Olioperusteinen ohjelmointi C++-kielellä Tässä osassa käsitellään olioperusteista (object-based) ohjelmointia, ts. olio-ohjelmointia ilman periytymisen hyödyntämistä. Olio-ohjelmoinnin

Lisätiedot

YHTEYSSUHDE (assosiation)

YHTEYSSUHDE (assosiation) YHTEYSSUHDE (assosiation) -Mikä on yhteyssuhde? -Miten toteutan yhteyssuhteen? 1 Mikä on yhteyssuhde? Yhteyssuhde kuvaa kahden olion välistä suhdetta: Esim. Auto Henkilö, omistussuhde Tili Asiakas, omistussuhde

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 8. kesäkuuta 2018 Yleistä Tentti 1 meni pistekeskiarvon (11.2) perusteella välttävästi. Omasta tehtäväpaperista saa kopion

Lisätiedot

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Kääntäjän virheilmoituksia

Kääntäjän virheilmoituksia OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning:

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 20. toukokuuta 2016 Yleistä Tentti 1 oli pistekeskiarvon (11.6) perusteella vaikea. Omasta tehtäväpaperista saa kopion Antti-Jussilta,

Lisätiedot

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

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

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö. Geneeriset luokat C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet Geneerinen luokka tarkoittaa parametroitua luokkamallia, jonka avulla voidaan muodostaa useita,

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

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

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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 18. toukokuuta 2018 Yleistä Tentti 1 oli pistekeskiarvon (12.7) perusteella vaikeudeltaan kohtuullinen. Omasta tehtäväpaperista

Lisätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

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

Oliot viestivät metodeja kutsuen

Oliot viestivät metodeja kutsuen 6. Metodit 6.1 Sisällys Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit). Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen

Lisätiedot

1. Mitä tehdään ensiksi?

1. Mitä tehdään ensiksi? 1. Mitä tehdään ensiksi? Antti Jussi i Lakanen Ohjelmointi 1, kevät 2010/ Jyväskylän yliopisto a) Etsitään Googlesta valmis algoritmi b) Mietitään miten itse tehtäisiin sama homma kynällä ja paperilla

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko

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

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä

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

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