Objektum elvű alkalmazások fejlesztése. Öröklődés. Készítette: Sike Sándor Gregorics Tibor

Hasonló dokumentumok
Objektum elvű alkalmazások fejlesztése. Öröklődés. Készítette: Sike Sándor Gregorics Tibor

Elemi Alkalmazások Fejlesztése II.

Tervminták I. (Sablonfüggvény, Stratégia, Egyke, Látogató) Testek térfogata Lények túlélési versenye

Maximum kiválasztás tömbben

Programozás II. 4. Dr. Iványi Péter

1. Alapok. Programozás II

117. AA Megoldó Alfréd AA 117.

Programozás C++ -ban 2007/4

Programozási nyelvek Java

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

OOP: Java 8.Gy: Abstract osztályok, interfészek

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás II gyakorlat. 4. Öröklődés

4. Öröklődés. Programozás II

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

500. AA Megoldó Alfréd AA 500.

Programozás C++ -ban

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a programozásba előadás: Öröklődés

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

1. Egy 30 cm sugarú körszelet körívének hossza 120 cm. Mekkora a körív középponti szöge?

128. AA Megoldó Alfréd AA 128.

500. CC Megoldó Alfréd CC 500.

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

Bevezetés a programozásba I.

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Programozás II gyakorlat. 6. Polimorfizmus

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Programozás C++ -ban

Kompetencia Alapú Levelező Matematika Verseny

3. előadás. Elemi geometria Terület, térfogat

Bevezetés a programozásba I.

6 MATEMATIKA A 9. SZAKISKOLAI ÉVFOLYAM TANÁRI KÉZIKÖNYV

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Objektumorientált programozás C# nyelven

Bevezetés a programozásba. 9. Előadás: Rekordok

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

3. Osztályok II. Programozás II

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3

OOP #14 (referencia-elv)

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Géptermi zh-írás forgatókönyve

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

INFORMATIKA tétel 2018

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Sejtautomaták. Szőke Kálmán Benjamin - SZKRADT.ELTE május 17.

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

Objektum elvű alkalmazások fejlesztése 3. beadandó

500. DD Megoldó Alfréd DD 500.

.AA Megoldó Alfréd AA.

Körkörös listák. fej. utolsó. utolsó. fej

Globális operátor overloading

C++ programozási nyelv

Programozás C++ -ban 2007/1

Virtuális függvények (late binding)

Java programozási nyelv 5. rész Osztályok III.

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

ISA szimulátor objektum-orientált modell (C++)

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1.

Java programozási nyelv 4. rész Osztályok II.

Programozási nyelvek Java

BME MOGI Gépészeti informatika 6.

Programozás II. ATM példa Dr. Iványi Péter

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Programozási alapismeretek 2009/2010

Bevezetés a programozásba 2

Matematika 8. osztály

Tervminták a valósidejű gyakorlatban

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

Osztály és objektum fogalma

JAVA PROGRAMOZÁS 3.ELŐADÁS

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Pénzügyi algoritmusok

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Az egyes feladatok részkérdéseinek a száma az osztály felkészültségének és teherbírásának megfelelően (a feladat tartalmához igazodva) csökkenthető!

Programozás C++ -ban 2007/7

228. AA Default Konstruktor AA 228.

Programozás II. 6.Öröklés Dr. Iványi Péter

Programozás C és C++ -ban

Kalapácsvetés 2016 szöveges

Feladat: Nagy számok típusa: Típusérték-halmaz: Típusműveletek: Értékadás operátor: Bitshift << operátor: Összeadás operátor:

Átírás:

Objektum elvű alkalmazások fejlesztése Öröklődés Készítette: Sike Sándor Gregorics Tibor Készítsünk programot, amellyel testek térfogatát számolhatjuk ki, illetve megadhatjuk azt is, hogy az egyes testfajtákból hány objektum létezik! A lehetséges fajták: szabályos sokszögek: gömb, kocka, tetraéder, oktaéder; hasáb jellegű testek: henger, négyzet alapú és szabályos háromszög alapú hasáb; gúla jellegű testek: kúp, négyzetes gúla. Test #méret Test :double oldalhossz vagy sugár példányok darabszáma Szabályos Gömb Kocka Tetraéder Oktaéder Szabályos Henger Hasáb #szorzó() :double Kúp Gúla return méret*méret*méret*szorzó() return alap()*magasság class Test virtual ~Test(); virtual double terfogat() const = 0; static int darab() return _darab; Test(double meret); double _meret; ; int Test::_darab = 0; Test::Test(double meret) _meret = meret; Test::~Test() class Szabalyos : public Test ~Szabalyos(); double terfogat() const; static int darab() return _darab; Szabalyos(double meret); virtual double szorzo() const = 0; ; int Szabalyos::_darab = 0; Szabalyos::Szabalyos(double meret) : Test(meret) Szabalyos::~Szabalyos() double Szabalyos::terfogat() const return _meret * _meret * _meret * szorzo(); 1

Szabályos Gömb -szorzó :double #szorzó() :double Kocka Tetraéder -szorzó :double = 4π/3 return 1 = 2/12 return méret*méret*méret*szorzó() Oktaéder -szorzó :double = 2/3 class Gomb : public Szabalyos Gomb(double meret); ~Gomb(); static int darab() return _darab; double szorzo() const return _szorzo; const static double _szorzo = (4.0 * 3.14159) / 3.0; ; int Gomb::_darab = 0; Gomb::Gomb(double meret) : Szabalyos(meret) Gomb::~Gomb() class Kocka : public Szabalyos Kocka(double meret); ~Kocka(); static int darab() return _darab; double szorzo() const return 1.0; ; int Kocka::_darab = 0; Kocka::Kocka(double meret) : Szabalyos(meret) Kocka::~Kocka() class Tetraeder : public Szabalyos Tetraeder(double meret); ~Tetraeder(); static int darab() return _darab; double szorzo() const return _szorzo; const static double _szorzo = 1.41421 / 12.0; ; int Tetraeder::_darab = 0; Tetraeder::Tetraeder(double meret) : Szabalyos(meret) Tetraeder::~Tetraeder() class Oktaeder : public Szabalyos Oktaeder(double meret); ~Oktaeder(); static int darab() return _darab; double szorzo() const return _szorzo; const static double _szorzo = 1.41421 / 3.0; ; int Oktaeder::_darab = 0; Oktaeder::Oktaeder(double meret) : Szabalyos(meret) Oktaeder::~Oktaeder() class Hasabfele : public Test ~Hasabfele (); double terfogat() const; static int darab() return _darab; Hasabfele(double meret, double magassag); virtual double alap() const = 0; double _magassag; ; int Hasabfele::_darab = 0; Hasabfele::Hasabfele(double meret, double magassag): Test(meret) _magassag = magassag; Hasabfele::~Hasabfele () double Hasabfele::terfogat() const return alap() * _magassag; 2

return (alap()*magasság)/3 Henger +darab() return méret*méret*π +darab() return méret*méret return alap()*magasság Hasáb +darab() return 3*méret*méret/4 class Henger : public Hasabfele Henger(double meret, double magassag); ~Henger(); static int darab() return _darab; ; int Henger::_darab = 0; Henger::Henger(double meret, double magassag) : Hasabfele(meret, magassag) Henger::~Henger() double Henger::alap() const return 3.14159 * _meret * _meret; class NegyzetesHasab : public Hasabfele NegyzetesHasab (double meret, double magassag); ~NegyzetesHasab (); static int darab() return _darab; ; int NegyzetesHasab::_darab = 0; NegyzetesHasab::NegyzetesHasab (double meret, double magassag) : Hasabfele(meret, magassag) NegyzetesHasab::~NegyzetesHasab () double NegyzetesHasab::alap() const return _meret * _meret; class HaromszogesHasab : public Hasabfele HaromszogesHasab (double meret, double magassag); ~HaromszogesHasab (); static int darab() return _darab; ; int HaromszogesHasab::_darab = 0; HaromszogesHasab::HaromszogesHasab (double meret, double magassag) : Hasabfele(meret, magassag) HaromszogesHasab::~HaromszogesHasab () -; double HaromszogesHasab::alap() const return 1.73205 * _meret * _meret / 4.0; class Gulafele : public Hasabfele ~Gulafele(); double terfogat() const; static int darab() return _darab; Gulafele(double meret, double magassag); ; int Gulafele::_darab = 0; Gulafele::Gulafele(double meret, double magassag) : Hasabfele(meret, magassag) Gulafele::~Gulafele() double Gulafele::terfogat() const return (alap() * _magassag) / 3.0; Kúp return méret*méret*π return (alap()*magasság)/3 return méret*méret 3

class Kup : public Gulafele Kup(double meret, double magassag); ~Kup(); static int darab() return _darab; ; int Kup::_darab = 0; Kup::Kup(double meret, double magassag) : Gulafele(meret, magassag) Kup::~Kup() double Kup::alap() const return 3.14159 * _meret * _meret; class NegyzetesGula : public Gulafele NegyzetesGula(double meret, double magassag); ~ NegyzetesGula(); static int darab() return _darab; ; int NegyzetesGula::_darab = 0; NegyzetesGula::NegyzetesGula(double meret, double magassag) : Gulafele(meret, magassag) NegyzetesGula::~NegyzetesGula() double NegyzetesGula::alap() const return _meret * _meret; #include <cstdlib> #include <iostream> #include <fstream> #include "test.h" using namespace std; int main() ifstream inp("testek.txt"); int testszam; inp >> testszam; Test **testek = new Test *[testszam]; 8 Kocka 5.0 Henger 3.0 8.0 Henger 1.0 10.0 Tetraeder 4.0 NegyzetesGula 3.0 10.0 Oktaeder 1.0 Kocka 2.0 NegyzetesGula 2.0 10.0 testek.txt for ( int i = 0; i < testszam; ++i ) string tipus; double meret, magassag; inp >> tipus; // különféle testek létrehozása a fájlbeli adatok alapján inp.close(); inp >> tipus; if ( tipus == "Kocka" ) A származtatás miatt lehet értékül adni egy Test* típusú változónak egy Kocka* pointert testek[i] = new Kocka(meret); else if ( tipus == "Gomb" ) testek[i] = new Gomb(meret); else if ( tipus == "Tetraeder" ) testek[i] = new Tetraeder(meret); else if ( tipus == "Oktaeder" ) testek[i] = new Oktaeder(meret); else if ( tipus == "Henger" ) testek[i] = new Henger(meret, magassag); else if ( tipus == "NegyzetesHasab" ) testek[i] = new NegyzetesHasab(meret, magassag); else if ( tipus == "HaromszogesHasab" ) testek[i] = new HaromszogesHasab(meret, magassag); else if ( tipus == "Kup" ) testek[i] = new Kup(meret, magassag); else if ( tipus == "NegyzetesGula" ) testek[i] = new NegyzetesGula(meret, magassag); else cout << "Ismeretlen idom" << endl; polimorfizmus: többalakúság for ( int i = 0; i < testszam; ++i ) cout << testek[i]->terfogat() << endl; dinamikus kötés: futás közben dől el, hogy ez milyen típusú, és ettől függ, hogy melyik terfogat() metódus hívódjon meg. cout << Test::darab() << " " << Szabalyos::darab() << " " << Hasabfele::darab() << " " << Gulafele::darab() << " " << Gomb::darab() << " " << Kocka::darab() << " " << Tetraeder::darab() << " " << Oktaeder::darab() << " " << Henger::darab() << " " << NegyzetesHasab::darab() << " " << HaromszogesHasab::darab() << " " << Kup::darab() << " " << NegyzetesGula::darab() << endl; for ( int i = 0; i < testszam; ++i ) delete testek[i]; delete [] testek; cout << Test::darab() << " " << Szabalyos::darab() << " " << Hasabfele::darab() << " " << Gulafele::darab() << " " << Gomb::darab() << " " << Kocka::darab() << " " << Tetraeder::darab() << " " << Oktaeder::darab() << " " << Henger::darab() << " " << NegyzetesHasab::darab() << " " << HaromszogesHasab::darab() << " " << Kup::darab() << " " << NegyzetesGula::darab() << endl; return 0; 4

Alapterület Test +terület(double):double virtual ~Alap() #méret :double Alapterület +terület(double):double Körterület return m*m*π Négyzetterület Háromszögterület return 3*m*m/4 Szabályos #szorzó() :double # *alap return m*m return méret*méret*méret*szorzó() return alap->terület(méret) * magasság Henger +darab() Kúp +darab() +darab() Gúla +darab() return alap->terület(méret) * magasság Hasáb +darab() return (alap->terület(méret) *magasság)/3 NegyzetesHasab::NegyzetesHasab() : Hasabfele() _alap = new Negyzet(); NegyzetesHasab::~NegyzetesHasab() delete _alap; NegyzetesGula::NegyzetesGula() : Gulafele() Henger::Henger() : Hasabfele() _alap = new Negyzet(); _alap = new Kor(); NegyzetesGula::~NegyzetesGula() Henger::~Henger() delete _alap; delete _alap; Haromszoges::HaromszogesHasab() : Hasabfele() Kup::Kup() : Gulafele() _alap = new Haromszog(); _alap = new Kor(); HaromszogesHasab::~HaromszogesHasab() Kup::~Kup() delete _alap; delete _alap; Alapterület return m*m*π Körterület -példány : Kör -Körterület() +terület(double m): double +példány() : Kör +terület(double):double Négyzetterület -példány : Négyzet -Négyzetterület() +példány() : Négyzet return 3*m*m/4 Háromszögterület -példány : Háromszög -Háromszögterület() +példány() : Háromszög return m*m class Negyzetterulet : public Alapterulet double terulet(double m) const return m * m; static Negyzetterulet *peldany(); static Negyzetterulet *_peldany; Negyzetterulet () ; Negyzetterulet *Negyzetterulet::_peldany = 0; Negyzetterulet *Negyzetterulet::peldany() if ( _peldany == 0 ) _peldany = new Negyzetterulet(); return _peldany; 5

class Korterulet : public Alapterulet double terulet(double m) const return 3.14159 * m * m; static Korterulet *peldany(); static Korterulet *_peldany; Korterulet () ; Korterulet *Korterulet::_peldany = 0; Korterulet *Korterulet::peldany() if ( _peldany == 0 ) _peldany = new Korterulet(); return _peldany; class Haromszogterulet : public Alapterulet double terulet(double m) const return 1.73205 * m * m / 4.0; static Haromszogterulet *peldany(); static Haromszogterulet *_peldany; Haromszogterulet() ; Haromszogterulet *Haromszogterulet::_peldany = 0; Haromszogterulet *Haromszogterulet::peldany() if ( _peldany == 0 ) _peldany = new Haromszogterulet(); return _peldany; NegyzetesHasab::NegyzetesHasab() : Hasabfele() _alap = Negyzetterulet::peldany(); NegyzetesHasab::~NegyzetesHasab() NegyzetesGula::NegyzetesGula() : Gulafele() _alap = Negyzetterulet::peldany(); NegyzetesGula::~NegyzetesGula() Haromszoges::HaromszogesHasab() : Hasabfele() _alap = Haromszogterulet::peldany(); HaromszogesHasab::~HaromszogesHasab() Henger::Henger() : Hasabfele() _alap = Korterulet::peldany(); Henger::~Henger() Kup::Kup() : Gulafele() _alap = Korterulet::peldany(); Kup::~Kup() 6