Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.

Samankaltaiset esitykset


Esitys aiheesta: "Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä."— Esityksen transkriptio:

1 Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä varaa tilan oliolle ja kutsuu luokkahierarkian muodostimia olion alustusta varten. Johdetun luokan oliolle varattavan tilan koko on johdetun luokan ja kantaluokan tietojäsenten vaatiman tilanvarauksen tavumäärä yhteenlaskettuna. Johdetun luokan olio saa kanta- ja johdetussa luokassa määritellyt tiedot.

2 Johdetun luokan olion alustus tMyn2 Luotaessa olio johdettuun luokkaan alustuu kantaluokkaan syntynyt ilmentymä ensin ja sen jälkeen johdettuun luokkaan syntynyt ilmentymä. Järjestelmä suorittaa siis johdetun luokan muodostimen rungon vasta kantaluokan muodostimen rungon jälkeen. Olion tyhjennys ja hajottimien suoritusjärjestys on päinvastainen.

3 Johdetun luokan olion alustus tMyn3 Johdetun luokan olion alustus halutuilla alkuarvoilla: johdettuLuokka olio(alkuarvot); johdettuLuokka olio= johdettuLuokka(alkuarvot); johdettuLuokka* olio=new johdettuLuokka(alkuarvot); Helpoin tapaus on jo käsiteltykin: kantaluokalla on ainoastaan oletusmuodostin. Johdetulla luokalla voi ola useitakin kuormitettuja muodostimia. Kantaluokan muodostin tulee kutsutuksi automaattisesti, niin kuin on nähty edellä.

4 Johdetun luokan olion alustus tMyn4 Entäpä jos kantaluokkaan on määritelty parametrillinen muodostin! Nyt tulee johdetun luokan muodostimessa olla mahdollista välittää tarvittavat argumentit kantaluokan muodostimelle niissä tapauksissa joissa johdetun luokan muodostin ei kutsu sellaista kantaluokan muodostinta, jossa arvot kysyttäisiin ohjelman käyttäjältä. Kokeillaan tätä aluksi automaattisen olion kohdalla:

5 Johdetun luokan olion alustus tMyn5 // Laatikko.h #ifndef LAATIKKO_H #define LAATIKKO_H class Laatikko { public: Laatikko(); void AsetaKArvo(); Laatikko(int); void AsetaKArvo(int); ~Laatikko(); void HaeNaytolle(); protected: int* mp_kanta; }; #endif

6 Johdetun luokan olion alustus tMyn6 // Pahvilaatikko.h #ifndef PAHVILAATIKKO_H #define PAHVILAATIKKO_H #include "Laatikko.h" class Pahvilaatikko: public Laatikko { public: Pahvilaatikko(); void AsetaJArvo(); Pahvilaatikko(int); void AsetaJArvo(int); Pahvilaatikko(int, int); ~Pahvilaatikko(); void HaeNaytolle(); private: int* mp_johdettu; }; #endif

7 Johdetun luokan olion alustus tMyn7 // Laatikko.cpp #include "stdafx.h" #include #include "Laatikko.h" using namespace System; using namespace std; Laatikko::Laatikko() { cout<<"Kantaluokan oletusmuodostin, olio "<<this<<"."<<endl; mp_kanta=new int; AsetaKArvo(); }

8 Johdetun luokan olion alustus tMyn8 void Laatikko::AsetaKArvo() { cout<<"Anna arvo (kantaluokka), olio "<<this<<": "; cin>>*mp_kanta; } Laatikko::Laatikko(int kanta) { cout<<"Kantaluokan param. muodostin, olio "<<this<<"."<<endl; mp_kanta=new int; AsetaKArvo(kanta); } void Laatikko::AsetaKArvo(int kanta) { *mp_kanta=kanta; }

9 Johdetun luokan olion alustus tMyn9 Laatikko::~Laatikko() { cout<<"Kantaluokan hajotin, olio "<<this<<"."<<endl; delete mp_kanta; mp_kanta=0; } void Laatikko::HaeNaytolle() { cout<<"Tietoj\204sen, olio "<<this<<":"<<endl; cout<<"kanta: "<<*mp_kanta<<"."<<endl; }

10 Johdetun luokan olion alustus tMyn10 // Pahvilaatikko.cpp #include "stdafx.h" #include #include "Pahvilaatikko.h" using namespace System; using namespace std; Pahvilaatikko::Pahvilaatikko() :Laatikko() { cout<<"Johdetun luokan oletusmuodostin, olio ” <<this<<"."<<endl; mp_johdettu=new int; AsetaJArvo(); }

11 Johdetun luokan olion alustus tMyn11 void Pahvilaatikko::AsetaJArvo() { cout<<"Anna arvo (johdettu luokka), olio "<<this<<": "; cin>>*mp_johdettu; } Pahvilaatikko::Pahvilaatikko(int johdettu) :Laatikko() { cout<<"Johdetun luokan param(1). muodostin, olio ” <<this<<"."<<endl; mp_johdettu=new int; AsetaJArvo(johdettu); } void Pahvilaatikko::AsetaJArvo(int johdettu) { *mp_johdettu=johdettu; }

12 Johdetun luokan olion alustus tMyn12 Pahvilaatikko::Pahvilaatikko(int kanta, int johdettu) :Laatikko(kanta) { cout<<"Johdetun luokan param(2). muodostin, olio ” <<this<<"."<<endl; mp_johdettu=new int; AsetaJArvo(johdettu); } Koska järjestelmä suorittaa johdetun luokan muodostimen rungon vasta kantaluokan muodostimen suorituksen jälkeen, on kantaluokalle kuuluvat alkuarvot välitettävä parametreina kantaluokan muodostimelle johdetun luokan muodostimen toteutuksen yhteydessä.

13 Johdetun luokan olion alustus tMyn13 Pahvilaatikko::~Pahvilaatikko() { cout<<"Johdetun luokan hajotin, olio "<<this<<"."<<endl; delete mp_johdettu; mp_johdettu=0; } void Pahvilaatikko::HaeNaytolle() { cout<<"Tietoj\204senet, olio "<<this<<":"<<endl; cout<<"kanta: "<<*mp_kanta<<"."<<endl; cout<<"johdettu: "<<*mp_johdettu<<"."<<endl; }

14 Johdetun luokan olion alustus tMyn14 // peri5Main.cpp : main project file. #include "stdafx.h" #include #include "Pahvilaatikko.h” using namespace System; using namespace std; int main(array ^args) { Pahvilaatikko ekaAutom=Pahvilaatikko(); ekaAutom.HaeNaytolle(); ekaAutom.AsetaKArvo(); ekaAutom.HaeNaytolle();

15 Johdetun luokan olion alustus tMyn15 Pahvilaatikko tokaAutom=Pahvilaatikko(58); tokaAutom.HaeNaytolle(); tokaAutom.AsetaJArvo(); tokaAutom.HaeNaytolle(); return 0; }

16 Johdetun luokan olion alustus tMyn16

17 Johdetun luokan olion alustus tMyn17 Toistetaan edellinen esimerkkiohjelma dynaamisen olion luonnilla, siis muutokset ainoastaan main- osaan:

18 Johdetun luokan olion alustus tMyn18 //sama kuin edellisessä esimerkissä … // peri5aMain.cpp : main project file. #include "stdafx.h" #include #include "Pahvilaatikko.h" using namespace System; using namespace std; int main(array ^args) { Pahvilaatikko* ekaDyn=new Pahvilaatikko(); ekaDyn->HaeNaytolle(); ekaDyn->AsetaKArvo(); ekaDyn->HaeNaytolle();

19 Johdetun luokan olion alustus tMyn19 Pahvilaatikko* tokaDyn=new Pahvilaatikko(57); tokaDyn->HaeNaytolle(); tokaDyn->AsetaJArvo(); tokaDyn->HaeNaytolle(); delete ekaDyn; delete tokaDyn; return 0; }

20 Johdetun luokan olion alustus tMyn20

21 Johdetun luokan olion alustus tMyn21 Tilanne ei muutu periaatteessa mitenkään, vaikka luokkahierarkioita lisättäisiin yhdellä. Olkoot kantaluokan periytymistapa public. Nyt erona kaksitasoiseen luokkahierarkiaan on se, että parametrillisia muodostimia tarvitaan useampia. Kokeillaan aluksi automaattisilla olioilla:

22 Johdetun luokan olion alustus tMyn22 // Laatikko.h #ifndef LAATIKKO_H #define LAATIKKO_H class Laatikko { public: Laatikko(); void AsetaLeveys(); void AsetaSyvyys(); void AsetaKorkeus(); Laatikko(double, double, double); void AsetaLeveys(double); void AsetaSyvyys(double); void AsetaKorkeus(double); ~Laatikko(); void HaeTiedot();

23 Johdetun luokan olion alustus tMyn23 protected: double m_leveys; double m_syvyys; double* mp_korkeus; }; #endif

24 Johdetun luokan olion alustus tMyn24 // Pahvilaatikko.h #ifndef PAHVILAATIKKO_H #define PAHVILAATIKKO_H #include "Laatikko.h" class Pahvilaatikko:public Laatikko { public: Pahvilaatikko(); void AsetaPaino(); Pahvilaatikko(double); void AsetaPaino(double); Pahvilaatikko(double, double, double, double); ~Pahvilaatikko(); void HaeTiedot(); protected: double* mp_paino; }; #endif Kutsuu kantaluokan oletus- muodostinta. Kutsuu kantaluokan parametrillista muodostinta.

25 Johdetun luokan olion alustus tMyn25 // ruokaRasia.h #ifndef RUOKARASIA_H #define RUOKARASIA_H #include "Pahvilaatikko.h" using namespace std;

26 Johdetun luokan olion alustus tMyn26 class ruokaRasia:public Pahvilaatikko { public: ruokaRasia(); void AsetaSisalto(); ruokaRasia(string); void AsetaSisalto(string); ruokaRasia(double, string); ruokaRasia(double, double, double, double, string); ~ruokaRasia(); void HaeTiedot(); protected: string* mp_sisalto; }; #endif Kutsuu Pahvilaatikko-luokan oletusmuodostinta. Kutsuu Pahvilaatikko-luokan 1 param. muodostinta. Kutsuu Pahvilaatikko-luokan 4 param. muodostinta.

27 Johdetun luokan olion alustus tMyn27 // Laatikko.cpp #include "stdafx.h" #include #include "Laatikko.h" using namespace System; using namespace std; Laatikko::Laatikko() { cout<<"Laatikko-luokan oletusmuodostin, olio "<<this<<endl; AsetaLeveys(); AsetaSyvyys(); mp_korkeus=new double; AsetaKorkeus(); }

28 Johdetun luokan olion alustus tMyn28 void Laatikko::AsetaLeveys() { cout<<"Anna leveys: "; cin>>m_leveys; cin.get(); } void Laatikko::AsetaSyvyys() { cout<<"Anna syvyys: "; cin>>m_syvyys; cin.get(); } void Laatikko::AsetaKorkeus() { cout<<"Anna korkeus: "; cin>>*mp_korkeus; }

29 Johdetun luokan olion alustus tMyn29 Laatikko::Laatikko(double leveys, double syvyys, double korkeus) { cout<<"Laatikko-luokan param. muodostin, olio "<<this<<endl; AsetaLeveys(leveys); AsetaSyvyys(syvyys); mp_korkeus=new double; AsetaKorkeus(korkeus); } void Laatikko::AsetaLeveys(double leveys) { m_leveys=leveys; } void Laatikko::AsetaSyvyys(double syvyys) { m_syvyys=syvyys; } void Laatikko::AsetaKorkeus(double korkeus) { *mp_korkeus=korkeus; }

30 Johdetun luokan olion alustus tMyn30 Laatikko::~Laatikko() { cout<<"Laatikko-luokan hajotin, olio "<<this<<endl; delete mp_korkeus; mp_korkeus=0; } void Laatikko::HaeTiedot() { cout<<"Laatikko-luokan olio "<<this<<":"<<endl <<"leveys: "<<m_leveys<<endl <<"syvyys: "<<m_syvyys<<endl <<"korkeus: "<<*mp_korkeus<<endl; }

31 Johdetun luokan olion alustus tMyn31 // Pahvilaatikko.cpp #include "stdafx.h" #include #include "Pahvilaatikko.h" using namespace System; using namespace std; Pahvilaatikko::Pahvilaatikko() :Laatikko() { cout<<"Pahviaatikko-luokan oletusmuodostin, olio "<<this<<endl; mp_paino= new double; AsetaPaino(); }

32 Johdetun luokan olion alustus tMyn32 void Pahvilaatikko::AsetaPaino() { cout<<"Anna paino: "; cin>>*mp_paino; cin.get(); } Pahvilaatikko::Pahvilaatikko(double paino) :Laatikko() { cout<<"Pahviaatikko-luokan 1 param. muodostin, olio ” <<this<<endl; mp_paino= new double; AsetaPaino(paino); } void Pahvilaatikko::AsetaPaino(double paino) { *mp_paino=paino; }

33 Johdetun luokan olion alustus tMyn33 Pahvilaatikko::Pahvilaatikko(double leveys, double syvyys, double korkeus, double paino) :Laatikko(leveys, syvyys, korkeus) { cout<<"Pahviaatikko-luokan 4 param. muodostin, olio "<<this<<endl; mp_paino= new double; AsetaPaino(paino); } Pahvilaatikko::~Pahvilaatikko() { cout<<"Pahvilaatikko-luokan hajotin, olio "<<this<<endl; delete mp_paino; mp_paino=0; }

34 Johdetun luokan olion alustus tMyn34 void Pahvilaatikko::HaeTiedot() { cout<<"Pahviaatikko-luokan olio "<<this<<":"<<endl <<"leveys: "<<m_leveys<<endl <<"syvyys: "<<m_syvyys<<endl <<"korkeus: "<<*mp_korkeus<<endl <<"paino: "<<*mp_paino<<endl; }

35 Johdetun luokan olion alustus tMyn35 // ruokaRasia.cpp #include "stdafx.h" #include #include "ruokaRasia.h" using namespace System; using namespace std; ruokaRasia::ruokaRasia() :Pahvilaatikko() { cout<<"ruokaRasia-luokan oletusmuodostin, olio "<<this<<endl; mp_sisalto= new string; AsetaSisalto(); }

36 Johdetun luokan olion alustus tMyn36 void ruokaRasia::AsetaSisalto() { cout<<"Anna sis\204lt\224: "; getline(cin, *mp_sisalto); } ruokaRasia::ruokaRasia(std::string sisalto) :Pahvilaatikko() { cout<<"ruokaRasia-luokan 1 param. muodostin, olio "<<this<<endl; mp_sisalto= new string; AsetaSisalto(sisalto); } void ruokaRasia::AsetaSisalto(std::string sisalto) { *mp_sisalto=sisalto; }

37 Johdetun luokan olion alustus tMyn37 ruokaRasia::ruokaRasia(double paino, std::string sisalto) :Pahvilaatikko(paino) { cout<<"ruokaRasia-luokan 2 param. muodostin, olio "<<this<<endl; mp_sisalto= new string; AsetaSisalto(sisalto); } ruokaRasia::ruokaRasia(double leveys, double syvyys, double korkeus, double paino, std::string sisalto) :Pahvilaatikko(leveys, syvyys, korkeus, paino) { cout<<"ruokaRasia-luokan 5 param. muodostin, olio "<<this<<endl; mp_sisalto= new string; AsetaSisalto(sisalto); }

38 Johdetun luokan olion alustus tMyn38 ruokaRasia::~ruokaRasia() { cout<<"ruokaRasia-luokan hajotin, olio "<<this<<endl; delete mp_sisalto; mp_sisalto=0; } void ruokaRasia::HaeTiedot() { cout<<"ruokaRasia-luokan olio "<<this<<":"<<endl <<"leveys: "<<m_leveys<<endl <<"syvyys: "<<m_syvyys<<endl <<"korkeus: "<<*mp_korkeus<<endl <<"paino: "<<*mp_paino<<endl <<"sisalto: "<<*mp_sisalto<<endl; }

39 Johdetun luokan olion alustus tMyn39 // periKoKe4Main.cpp : main project file. #include "stdafx.h" #include #include "ruokaRasia.h" using namespace System; using namespace std; int main(array ^args) { ruokaRasia eka(1.1, 2.2, 3.3, 4.4, string("rusinainen maksalaatikko")); eka.HaeTiedot(); eka.AsetaKorkeus(); eka.HaeTiedot(); return 0; }

40 Johdetun luokan olion alustus tMyn40

41 Johdetun luokan olion alustus tMyn41 Kokeillaan vielä dynaaminen objekti:

42 Johdetun luokan olion alustus tMyn42 //… //sama kuin edellinen esimerkki // periKoKe4Main.cpp : main project file. #include "stdafx.h" #include #include "ruokaRasia.h" using namespace System; using namespace std; int main(array ^args) { ruokaRasia* eka=new ruokaRasia(1.1, 2.2, 3.3, 4.4, "rusinainen maksalaatikko"); eka->HaeTiedot(); eka->AsetaLeveys(); eka->HaeTiedot(); delete eka; return 0; }

43 Johdetun luokan olion alustus tMyn43


Lataa ppt "Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä."

Samankaltaiset esitykset


Iklan oleh Google