Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
Luokkien väliset koostesuhteet
Luokan otsikko- ja toteutustiedosto tMyn1 Luokan otsikko- ja toteutustiedosto •Tähän asti ohjelmaesimerkit on toteutettu siten, että kaikki koodi on yhdessä.
16. Javan omat luokat.
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Syksy 2001 KYAMK/J.Ansamäki/Olio- ohjelmointi71 Olio-ohjelmointi 2. osa: diat (2. välikoe) KYMENLAAKSON AMMATTIKORKEAKOULU Jarkko Ansamäki, 2001.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
1. Olio-ohjelmointi.
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Olio-ohjelmoinnin perusteet luento 3
OLIO-OHJELMOINTI PERUSTEET PERUSTIETOTYYPIT
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
Luokan muodostintMyn1 Luokan muodostin Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen.
Vakio-osoitin ja osoitin vakioon tMyn1 Vakio-osoitin ja osoitin vakioon Tavallinen osoitin voi vaihtaa osoitettavaa keskusmuistialuetta. Tämä voidaan tehdä.
Luokkien löytyminen käytännössä tMyn1 Luokkien löytyminen käytännössä Kun aletaan ratkaista elävän elämän ohjelmointitehtäviä, niin ensimmäisten asioiden.
9. Periytyminen Javassa.
Osoitin ja char- tietotyyppi tMyn1 Osoitin ja char-tietotyyppi Osoitinmuuttuja, joka on tyyppiä char* voidaan alustaa merkkijonolla: char* alku=”En toivo.
Sami Jantunen LTY/Tietotekniikan osasto
Dynaamiset oliottMyn1 Dynaamiset oliot Dynaamisen olion tunnuksen esittely ja olion määrittely voivat tapahtua yhtäaikaisesti tai eri aikaan. Dynaamisen.
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
Tekstitiedostosta lukeminen tMyn1 Tekstitiedostosta lukeminen Tiedosto voidaan avata pelkästään lukemista varten tai kirjoittamista ja lukemista varten.
Funktion esittely eli prototyyppi tMyn1 Funktion esittely eli prototyyppi Funktion esittely (function declaration) kertoo funktion nimen, parametrien tyypit.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Normalisointi2tMyn1 Yksi kelpo perusavain on sarakkeet laakNro ja vastAika. Toinen voisi olla potNro ja vastAika, kolmas voisi olla huoneNro ja vastAika,…,
Luokan muodostintMyn1 Luokan muodostin Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen.
7. Oliot ja viitteet.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
String-vertailusta ja Scannerin käytöstä (1/2)
19. Olio-ohjelmointia Javalla
Lueteltu tyyppitMyn1 Lueteltu tyyppi Lueteltu tyyppi on tietotyyppi, jonka arvot luetellaan erikseen tyypin määrittelyn yhteydessä. Lueteltua tietotyyppiä.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
Ohjelman keskeytys virhetilanteessa tMyn1 Ohjelman keskeytys virhetilanteessa Poikkeustilanteet voidaan ryhmitellä logiikkavirheisiin ja muihin ajonaikaisiin.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Johdetun luokan olion esittely... tMyn1 Johdetun luokan olion esittely ja määrittely Esittelyluokka tarkoittaa olion tunnuksen luokkaa. Määrittelyluokka.
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Poikkeustenkäsittely- lohkot tMyn1 Poikkeustenkäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw.
Oman poikkeus- käsittelyfunktion tMyn1 Oman poikkeuskäsittelyfunktion määrittely Funktion tulisi muodostaa ainoastaan sellaisia poikkeuksia, jotka on sallittu.
Tekstitiedostoon kirjoittaminen tMyn1 Tekstitiedostoon kirjoittaminen Tiedostoja käsitellään ohjelmassa tiedosto-olion avulla. Tiedosto-olion luokka sisältää.
Ohjelmointi työtä n. 16 h/vko onnistumista työtä n. 16 h/vko onnistumista #include int main(void) { std::cout
Monimuotoinen luokka tMyn1 Monimuotoinen luokka Monimuotoinen luokka mahdollistaa saman jäsenfunktion toteutuksen monella tavalla. Tällöin puhutaan virtuaalisesta.
Tiedon vieminen funktiolle tMyn1 Tiedon vieminen funktiolle, parametrit Argumentin vieminen funktiolle voidaan toteuttaa kahdella menetelmällä: –Pass-by-Value.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Kantaluokan määrittely tMyn1 Kantaluokan määrittely Perinnän käyttöön liittyvät varatut sanat private, protected, public, final ja abstract. Ne tarkoittavat.
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Olio ohjelmoinnin perusteet luento 3: Johdanto C++ kieleen, Ensimmäinen C++ ohjelma, Olioiden elinkaari Jani Rönkkönen LTY/Tietotekniikan osasto Kalvot.
Olio-ohjelmoinnin perusteet luento 5 Päivi Ovaska LTY/Tietotekniikan osasto.
Olio-ohjelmoinnin perusteet luento 2
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
6. Metodit.
1. Olio-ohjelmointi.
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Kantaluokan määrittely
6. Metodit.
13. Pakkaukset.
7. Näytölle tulostaminen
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan olemassa olevan olion tiedoilla. Kääntäjä generoi kopiointimuodostimen, joka kopioi uudelle oliolle parametrina välitetyn saman luokan olion tietojäsenten sisällön. Ohjelmoija voi määritellä kopiointimuodostimen myös itse, jos kääntäjän generoiman muodostimen toiminta ei tyydytä.

Olioon kohdistuvia perustoimintoja tMyn2 Automaattisen olion tilanvaraus ja kopiointimuodostimen kutsu: Luokka uusiAutomOlio(vanhaAutomOlio); Luokka uusiAutomOlio=vanhaAutomOlio; Luokka uusiAutomOlio(*vanhaDynOlio); Luokka uusiAutomOlio=*vanhaDynOlio;

Olioon kohdistuvia perustoimintoja tMyn3 Dynaamisen olion tilanvaraus ja kopiointimuodostimen kutsu: Luokka *uusiDynOlio; uusiDynOlio=new Luokka(vanhaAutomOlio); uusiDynOlio=new Luokka(*vanhaDynOlio); Koska seuraavana kappaleena on ”Dynaamiset oliot”, niin käsitellään tässä yhteydessä automaattisen olion tietojäseniä – sekä automaattisia että dynaamisia tietojäseniä.

Olioon kohdistuvia perustoimintoja tMyn4 Ohjelmoija voi myös itse määritellä kopiointimuodostimen. Silloin tulee muistaa: –Kopiointimuodostimen ensimmäinen parametri on viittaus saman luokan olioon. –Viittaus voi olla määritelty vakioksi const-määreellä. –Kopiointimuodostimen muilla mahdollisilla parametreilla tulee olla oletusarvo. –Jos ohjelmoija määrittelee kopiointimuodostimen, ei kääntäjä generoi oletusmuodostinta.

Olioon kohdistuvia perustoimintoja tMyn5 Kopiointimuodostimen esittelytavat: Luokka (const Luokka&); Luokka (const Luokka&, parametri=alkuarvo,...); Seuraavassa esimerkissä itse tehdyssä kopiointimuodostimessa korkeudelle on annettu oletusarvo – siis kun luodaan uusi olio tällaisella kopiointimuodostimella, niin syntynyt olio ei ole identtinen mallinsa kanssa.

Olioon kohdistuvia perustoimintoja tMyn6 #include "stdafx.h" #include using namespace System; using namespace std; class Laatikko { public: Laatikko(double, double, double); Laatikko(const Laatikko&, double=6.8); void AsetaLeveys(double); void AsetaSyvyys(double); void AsetaKorkeus(double); double LaskeTilavuus(); private: double m_leveys; double m_syvyys; double m_korkeus; };

Olioon kohdistuvia perustoimintoja tMyn7 Laatikko::Laatikko(double leveys, double syvyys, double korkeus) { cout<<"Param. muodostin, olio "<<this<<endl; AsetaLeveys(leveys); AsetaSyvyys(syvyys); AsetaKorkeus(korkeus); } void Laatikko::AsetaLeveys(double leveys) { m_leveys=leveys; } void Laatikko::AsetaSyvyys(double syvyys) { m_syvyys=syvyys; } void Laatikko::AsetaKorkeus(double korkeus) { m_korkeus=korkeus; }

Olioon kohdistuvia perustoimintoja tMyn8 Laatikko::Laatikko(const Laatikko& viittaus, double korkeus) { cout<<"Kopiointimuodostin, olio "<<this<<endl; m_leveys=viittaus.m_leveys; m_syvyys=viittaus.m_syvyys; m_korkeus=korkeus; } double Laatikko::LaskeTilavuus() { return m_leveys*m_syvyys*m_korkeus; }

Olioon kohdistuvia perustoimintoja tMyn9 int main(array ^args) { Laatikko ekaAito(2.1, 3.2, 4.3); Laatikko ekaKopio=ekaAito; Laatikko tokaKopio(ekaAito, 5.7); cout<<"Tilavuus, ekaAito: " <<ekaAito.LaskeTilavuus()<<"."<<endl; cout<<"Tilavuus, ekaKopio: " <<ekaKopio.LaskeTilavuus()<<"."<<endl; cout<<"Tilavuus, tokaKopio: " <<tokaKopio.LaskeTilavuus()<<"."<<endl; ekaAito.AsetaLeveys(2.11); cout<<"Tilavuus lopuksi, ekaAito: " <<ekaAito.LaskeTilavuus()<<"."<<endl; return 0; }

Olioon kohdistuvia perustoimintoja tMyn10

Olioon kohdistuvia perustoimintoja tMyn11 Olion tilanvarauksen jälkeen olemassa olevan olion tietojäsenet voidaan muuttaa sijoitusoperaattorilla (=) samoiksi kuin mitä jonkin saman luokan olion tietojäsenet ovat. Kopioinnissa on aina kysymys uuden olion luonnista kopiointimuodostimen avulla, kun taas sijoituksessa jo olemassa olevan olion tietojäsenten arvot korvautuvat uusilla. Sijoitus olemassa olevaan saman luokan olioon: olenOlemassa=niinMinakin; Käytetään edellistä esimerkkiohjelmaa:

Olioon kohdistuvia perustoimintoja tMyn12 //sama kuin edellinen esimerkki … int main(array ^args) { Laatikko ekaAito(2.1, 3.2, 4.3); Laatikko ekaKopio=ekaAito; Laatikko tokaKopio(ekaAito, 5.7); cout<<"Tilavuus, ekaAito: " <<ekaAito.LaskeTilavuus()<<"."<<endl; cout<<"Tilavuus, ekaKopio: " <<ekaKopio.LaskeTilavuus()<<"."<<endl; cout<<"Tilavuus, tokaKopio: " <<tokaKopio.LaskeTilavuus()<<"."<<endl; ekaAito.AsetaLeveys(2.11); cout<<"Tilavuus nyt, ekaAito: " <<ekaAito.LaskeTilavuus()<<"."<<endl; ekaAito=ekaKopio; cout<<"Tilavuus lopuksi, ekaAito: " <<ekaAito.LaskeTilavuus()<<"."<<endl; return 0; }

Olioon kohdistuvia perustoimintoja tMyn13

Olioon kohdistuvia perustoimintoja tMyn14 Hajotin (destructor) on luokan jäsenfunktio, jonka toiminta on käänteinen muodostimen toimintaan nähden. Hajottimen tarkoituksena on tyhjentää olion tietojäsenet ja vapauttaa olion sisäiset rakenteet. Järjestelmä kutsuu hajotinta olion tilanvapautuksen yhteydessä automaattisesti. Hajotinta voidaan kutsua ohjelmallisesti myös ennen olion tilanvapautusta, kun olio halutaan väliaikaisesti tyhjentää. Tämä on harvinaista. Kääntäjä generoi luokalle hajottimen, jos ohjelmoija ei sitä itse kirjoita.

Olioon kohdistuvia perustoimintoja tMyn15 Hajottimella on erityistä merkitystä, jos luokassa on esitelty dynaamisia tietojäseniä. Jos hajotin rakennetaan itse, niin on syytä muistaa: –hajottimen nimi on luokan nimi ja sen edessä on merkki ~ –hajotin ei saa parametrejä –hajottimella ei ole tyyppiä Hajottimen kutsu tapahtuu automaattisesti olion tilanvapautuksen yhteydessä. Automaattisen olion tila vapautuu olion luoneen lohkon lopussa. Dynaamisten olioiden yhteydessä delete-operaattorin käyttö aiheuttaa hajottimen kutsun.

Olioon kohdistuvia perustoimintoja tMyn16 Hajottimen toteutus: Luokka::~Luokka() { dynaamisten tietojäsenten varaaman tilan vapauttaminen } Jos oliolla on dynaamisia tietojäseniä, niin ohjelmoijan on toteutettava luokkaan oma hajotin, joka vapauttaa dynaamisesti varatun tilan.

Olioon kohdistuvia perustoimintoja tMyn17 #include "stdafx.h" #include using namespace System; using namespace std; class Ympyra { public: Ympyra(); void AsetaSade(); void AsetaViivanPaksuus(); Ympyra(double, double); void AsetaSade(double); void AsetaViivanPaksuus(double); ~Ympyra(); double LaskeAla(); private: double m_sade; double* mp_viivanpaksuus; };

Olioon kohdistuvia perustoimintoja tMyn18 Ympyra::Ympyra() { cout<<"Oletusmuodostin, olio "<<this<<"."<<endl; AsetaSade(); mp_viivanpaksuus=new double; AsetaViivanPaksuus(); } void Ympyra::AsetaSade() { cout<<"Anna s\204de: "; cin>>m_sade; } void Ympyra::AsetaViivanPaksuus() { cout<<"Anna viivan paksuus: "; cin>>*mp_viivanpaksuus; }

Olioon kohdistuvia perustoimintoja tMyn19 Ympyra::Ympyra(double sade, double viivanpaksuus) { cout<<"Parametrillinen muodostin, luodaan olio " <<this<<"."<<endl; AsetaSade(sade); mp_viivanpaksuus=new double; AsetaViivanPaksuus(viivanpaksuus); } void Ympyra::AsetaSade(double sade) { m_sade=sade; } void Ympyra::AsetaViivanPaksuus(double viivanpaksuus) { *mp_viivanpaksuus=viivanpaksuus; }

Olioon kohdistuvia perustoimintoja tMyn20 Ympyra::~Ympyra() { cout<<"Hajotin, olio "<<this<<"."<<endl; delete mp_viivanpaksuus; mp_viivanpaksuus=0; } double Ympyra::LaskeAla() { const double pii= ; return pii*m_sade*m_sade; }

Olioon kohdistuvia perustoimintoja tMyn21 int main(array ^args) { Ympyra eka=Ympyra(); cout<<"Ala eka alussa: "<<eka.LaskeAla()<<endl; Ympyra toka=Ympyra(4.567, ); cout<<"Ala, toka: "<<toka.LaskeAla()<<endl; eka.AsetaSade(); cout<<"Ala eka keskell\204: "<<eka.LaskeAla()<<endl; eka.AsetaSade(12.945); cout<<"Ala eka lopuksi: "<<eka.LaskeAla()<<endl; return 0; }

Olioon kohdistuvia perustoimintoja tMyn22

Olioon kohdistuvia perustoimintoja tMyn23 Nyt kun hajotin on esitelty, voidaan palata kopiointimuodostimen toimintaan. Sellaisessa tapauksessa, että oliolla on dynaamisesti allokoituja tietojäseniä, järjestelmän generoima kopiointimuodostin ei toimi halutulla tavalla. Testataan aluksi, että näin tosiaan on antamalla järjestelmän generoida oletusmuotoisen kopiointimuodostimen:

Olioon kohdistuvia perustoimintoja tMyn24 #include "stdafx.h" #include using namespace System; using namespace std; class A { public: A(); A(int); void AsetaArvo(); void AsetaArvo(int); void HaeArvo(); private: int* mp_arvo; };

Olioon kohdistuvia perustoimintoja tMyn25 A::A() { cout<<"Oletusmuodostin, olio "<<this<<endl; mp_arvo=new int; AsetaArvo(); } A::A(int arvo) { cout<<"Parametrillinen muodostin, olio "<<this<<endl; mp_arvo=new int; AsetaArvo(arvo); } void A::AsetaArvo() { cout<<"Anna arvo: "; cin>>*mp_arvo; }

Olioon kohdistuvia perustoimintoja tMyn26 void A::HaeArvo() { cout<<"Tietoj\204senen arvo on "<<*mp_arvo<<", olio ” <<this<<endl; };

Olioon kohdistuvia perustoimintoja tMyn27 int main(array ^args) { A ekaAutoAlkup=A(); cout<<"Alkuper\204isen olion tietoj\204senen arvo alussa:” <<endl; ekaAutoAlkup.HaeArvo(); cout<<"J\204rjestelm\204n generoima kopiointimuodostin:” <<endl; A ekaAutoKopio=ekaAutoAlkup; ekaAutoKopio.HaeArvo(); cout<<"Yritet\204\204n tehd\204 muutos vain kopioidun \ olion tietoj\204senelle:”<<endl; ekaAutoKopio.AsetaArvo(1957); cout<<"Kopioidun olion tietoj\204sen:"<<endl; ekaAutoKopio.HaeArvo(); cout<<"Alkuper\204isen olion tietoj\204senen arvo lopuksi:” <<endl; ekaAutoAlkup.HaeArvo(); return 0; }

Olioon kohdistuvia perustoimintoja tMyn28

Olioon kohdistuvia perustoimintoja tMyn29 Ongelmana on siis se, että kopioitavan olion osoitintietojäsenet kopioituvat uuteen olioon osoitteina. Eli kahdessa oliossa on osoitin samaan muistiosoitteeseen. Jos toinen olioista tuhotaan niin myös osoitettavan muistipaikan sisältö tuhotaan. Oletuskopiointimuodostin ei siis toimi tällaisessa tapauksessa! Jos nyt äskeiseen ohjelmaan lisättäisiin hajotin, niin yllämainitusta syystä muutos aiheuttaisi virhetilanteen. Pidetään ohjelma muuten samana:

Olioon kohdistuvia perustoimintoja tMyn30 //sama kuin edellinen esimerkki class A { public: A(); A(int); ~A(); void AsetaArvo(); void AsetaArvo(int); void HaeArvo(); private: int* mp_arvo; }; //sama kuin edellinen esimerkki … A::~A() { cout<<"Hajotin, olio "<<this<<endl; delete mp_arvo; } …

Olioon kohdistuvia perustoimintoja tMyn31 Kun ohjelmaa yrittää nyt ajaa hajottimen lisäyksen jälkeen…:

Olioon kohdistuvia perustoimintoja tMyn32 Tehdään edelliseen ohjelmaan oma kopiointimuodostin, jolloin edellä kuvattuja ongelmia ei enää synny:

Olioon kohdistuvia perustoimintoja tMyn33 #include "stdafx.h" #include using namespace System; using namespace std; class A { public: A(); A(int); A(const A&); ~A(); void AsetaArvo(); void AsetaArvo(int); void HaeArvo(); private: int* mp_arvo; };

Olioon kohdistuvia perustoimintoja tMyn34 A::A() { cout<<"Oletusmuodostin, olio "<<this<<endl; mp_arvo=new int; AsetaArvo(); } A::A(int arvo) { cout<<"Parametrillinen muodostin, olio "<<this<<endl; mp_arvo=new int; AsetaArvo(arvo); } A::A(const A& viittaus) { cout<<"Kopiointimuodostin, olio "<<this<<endl; mp_arvo=new int; *mp_arvo=*(viittaus.mp_arvo); }

Olioon kohdistuvia perustoimintoja tMyn35 A::~A() { cout<<"Hajotin, olio "<<this<<endl; delete mp_arvo; } void A::AsetaArvo() { cout<<"Anna arvo: "; cin>>*mp_arvo; } void A::AsetaArvo(int arvo) { *mp_arvo=arvo; } void A::HaeArvo() { cout<<"Tietoj\204senen arvo on "<<*mp_arvo<<", olio ” <<this<<endl; };

Olioon kohdistuvia perustoimintoja tMyn36 int main(array ^args) { A ekaAutoAlkup=A(); cout<<"Alkuper\204isen olion tietoj\204senen arvo alussa:"<<endl; ekaAutoAlkup.HaeArvo(); cout<<"J\204rjestelm\204n generoima kopiointimuodostin:"<<endl; A ekaAutoKopio=ekaAutoAlkup; ekaAutoKopio.HaeArvo(); cout<<"Yritet\204\204n tehd\204 muutos vain \ kopioidun olion tietoj\204senelle:"<<endl; ekaAutoKopio.AsetaArvo(1957); cout<<"Kopioidun olion tietoj\204sen:"<<endl; ekaAutoKopio.HaeArvo(); cout<<"Alkuper\204isen olion tietoj\204senen arvo lopuksi:"<<endl; ekaAutoAlkup.HaeArvo(); return 0; }

Olioon kohdistuvia perustoimintoja tMyn37