BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

(instance konkrétní třídy)
ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Programování 2 Cvičení 5.
Úvod do objektově orientovaného programování
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
Algoritmy I Cvičení č. 1.
Singleton 1 1.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Preprocess Úvod do tvorby funkcí Princip preprocesoringu Direktivy preprocesoru Podmíněný překlad Základy tvorby funkcí Zjednodušený popis principu předávaní.
Programování v C++ Cvičení.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
C# - struktury, výčtové typy, pole
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Třída jako zdroj funkcionality
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Objektové programování
Dynamická alokace, polymorfismus
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
DEKLARACE PROMĚNNÝCH A KONSTANT
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
6. cvičení Polymorfismus
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
IB111 Programování a algoritmizace
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – procedury Mgr. Lenka Švancarová.
Počítače a programování 1
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Práce se soubory a řetězci Přednáška č. 9. Práce se soubory v C (1)  Knihovna #include  Knihovna #include  Ukazatel FILE *stream;  Otevření souboru.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programovací jazyk C++
Y36PJC Programování v jazyce C/C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Návrhový vzor Flyweight
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 3
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Bridge.
C# přehled vlastností.
Přednáška 9 Triggery.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod ÚVOD DO C++ 2 BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod

2. BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod 2.1. Funkce - konstruktor a destruktor 2.2. Konstruktor s parametrem 2.3. Dědičnost - základ 2.4. Ukazatel objektu 2.5. Třídy, struktury, unie, porovnání 2.6. Vložené ( in-line ) funkce 2.7. Automatické vkládání funkcí

Funkce KONSTRUKTOR a DESTRUKTOR. Konstruktor třídy je volán vždy, když je vytvářen objekt dané třídy. Všechny proměnné při instanci objektových typů by měly být ihned inicializovány. Konstruktor má : stejné jméno jako třída, které je součástí nemá : návratový typ Třída může mít více konstruktorů, které se liší seznamem parametrů.( viz přetížení funkce ) Příklad konstruktoru bez parametrů: class moje_trida { int a; public: moje_trida( ); // implicitní konstruktor, nemá parametry void ukaz(); // členská funkce } ; definice konstruktoru třídy : moje_trida:: moje_trida( ) { a=10; }

DESTRUKTOR je komplementárním doplňkem konstruktoru. Tato funkce je volána vždy, když je objekt rušen. S rušením objektu bývají prováděny určité, specifické akce, např. uvolnění paměti přidělené dynamickou alokací atd. Destruktor má : - stejné jméno jako třída, které je součástí - jméno uvozeno znakem ~ nemá : - návratový typ - nesmí mít parametry Třída může mít pouze jeden destruktor. Konstruktor i destruktor mohou provádět jakýkoliv typ operace, avšak obvykle se této možnosti nevyužívá. Obsahují zpravidla pouze operace, které mají přímý vztah k inicializaci nebo k rušení objektu.

Příklad : #include<iostream> using namespace std; //...................................................Deklarace třidy: class moje_trida { int a; public: moje_trida(); //………………… konstruktor ~moje_trida(); //………………….destruktor void ukaz(); }; //......Definice konstruktoru : moje_trida::moje_trida() { cout<< "Inicializace konstruktorem a = 10 "; a = 10; } //.......Definice destruktoru : moje_trida::~moje_trida() cout<<"Ruseni...... \n";

KONSTRUKTOR S PARAMETRY Konstruktor lze doplnit parametry a tyto parametry použít k inicializaci privátních datových členů deklarovaného objektu.( viz OOP) Příklad: class moje_trida { int a; // implicitně privátní proměnná public: moje_trida ( int x); // deklarace konstruktoru s parametrem void zobraz( ); // členská funkce ( metoda ) } ; //…………………………………. definice konstruktoru s parametrem moje_trida::moje_trida( int x ) { a = x ; } // ………………………………… definice metody: void moje_trida:: zobraz() cout << a << "\n"; Int main () moje_trida objekt( 4 ); // parametr pro konstruktor

Implicitní konstruktor. Zápis konstruktoru s parametrem pomocí inicializační části konstruktoru. Syntaxe: Inicializační část se zapisuje za hlavičku konstruktoru a je od ní oddělena dvojtečkou. Potom nasleduje zápis identifikátorů datových složek, za kterými jsou v závorkách uvedeny jejich inicializační hodnoty. Příklad: class moje_trida{ int a; public: moje_trida ( int x); // deklarace konstruktoru s parametrem void zobraz(); }; //definice konstruktoru s parametrem, tělo konstruktoru je prázdné: moje_trida::moje_trida( int x ) : a( x ) { } Implicitní konstruktor. V případě, že není deklarován ve třídě žádný konstruktor, je vytvořen překladačem konstruktor implicitní, který - nemá parametry - je vložený ( in-line ) - je veřejně přístupný

DĚDIČNOST - úvod. Dědičnost umožňuje - aby jedna třída zdědila vlastnosti jiné třídy. - hierarchické vytváření tříd s trendem od obecnosti ( bázová třída, předek, rodičovské třída ) až po třídy zahrnující nové, zcela specifické vlastnosti. ( odvozené třídy ) Způsob dědění je dán uvedením specifikátoru přístupového práva ( specifikátor přístupu ). Specifikuje přístupová práva odvozené třídy k děděným členům základní třídy nebo třídám.( při vícenásobném dědění ). Syntaxe dědění základní třídy: class jméno _odvozené_Třídy :specifikátor_přístupu jméno_základní_Třídy { ............................ členové odvozené třídy; ........................... } ; Příklad jednoduchého dědění: class Odvozena : public Zakladni {

Konstruktor, destruktor a dědění. ZPŮSOBY DĚDĚNÍ. Možnosti dědící třídy jsou jednoznačně určeny specifikátory - public - private - protected Příklad: Dědění se specifikátorem public. public říká překladači, že třída bude děděna tak,že 1) všechny veřejné členy základní třídy budou rovněž veřejnými členy odvozené třídy 2)všechny privátní členy základní třídy zůstanou jejími privátními členy a nebudou přímo dosažitelné členy odvozené třídy. Dosažitelné budou pouze pomocí metod zakladni třídy Konstruktor, destruktor a dědění. Při vytváření instance odvozené třídy jsou nejprve vytvořeny zděděné podobjekty. Před konstruktory odvozených tříd jsou volány konstruktory předků.

class A{ public: { A(){ cout<<"A";} ~A(){ cout<<"A";} }; class B:public A{ B(){ cout<<"B";} ~B(){ cout<<"B";} class C:public A{ C(){ cout<<"C";} ~C(){ cout<<"C";} class D: public B,public C{ D(){ cout<<"D"<<endl; } ~D(){ cout<<"D"; } int main() { D d; system("PAUSE"); return 0; } pořadí konstruktorů AB AC D pořadí destruktorů D CA BA

UKAZATELÉ OBJEKTU Zpřístupnění členů objektu lze provést dvojím způsobem, 1) pomocí tečkového operátoru ( . ) když pracujeme přímo s objektem nebo 2) pomocí šipkového operátoru ( -> ) když přistupujeme k členům objektu pomocí ukazatele na objekt ( t.j. pomocí adresy objektu ). K získání adresy objektu používáme adresní operátor &. class Moje_trida { int a; public: Moje_trida( int x); //konstruktor int vypis(); }; int main() { Moje_trida objekt(120) ; Moje_trida *p_objekt; /* vytváří ukazatel na objekt p_objekt = & objekt ; //p_objekt nyní ukazuje na objekt cout << objekt . vypis() << "\n"; cout<<p_objekt -> vypis()<<"\n";

TŘÍDY, STRUKTURY, UNIE - porovnání. V C++ byla definice struktury rozšířena. Může zahrnovat - členské funkce, - konstruktory, -destruktory stejně jako třída. Rozšířená syntaxe struktury: struct jméno_typu { // veřejné funkce a datové členy private: // privátní funkce a datové členy } seznam_objektů; Jediný rozdíl mezi třídou a strukturou : složky struktury, pro které nejsou specifikována přístupová práva, jsou implicitně věřejné ( public ), zatímco složky tříd, pro které nejsou specifikována přístupová práva jsou implicitně soukromé ( private ).

Porovnání unie ( union ) a třídy ( class ). V C++ byla definice unie rozšířena. Může obsahovat data i funkce. Pokud pro složky unie nespecifikujeme přístupová práva, budou stejně jako u struktury veřejně přístupné. Členové unie sdílejí stejnou oblast paměti jako tomu bylo v jazyku C. V C++ existují speciální unie, tzv. anonymní unie. Anonymní unie nemá jméno, sděluje pouze překladači, že jejími členy bude sdílena stejná oblast paměti. Jsou dosažitelné přímo, bez tečkového operátoru. int main() { union { //Anomymní unie - chybí jméno int i; char znak[5]; }; // end anonymní unie znak[0] = 'A'; i = 4; // přímý přístup k i v unii cout << "i = " << i << "znak[0]= " << znak[0];

VKLÁDANÍ FUNKCÍ ( in-line fce ). In-line fce je obdobou makra v jazyku C. Výhoda - spočívá ve vkládání této fukce do místa jejího volání. Tím se ušetří čas spojený s voláním funkce a program je rychlejší.. Nevýhoda - jsou-li fce velké a volány příliš často, program se výrazně zvětší. Před definici vkládané funkce je nutné vložit specifikátor inline Příklad in-line členské funkce: class vzorek{ int i, j; public: vzorek(int a, int b); int delitelny(); // in-line fce }; // konec tridy vzorek //Definice in-line fce, zde je specifikátor inline: inline int vzorek::delitelny() { return !(i%j); // dělitelné,vrací negaci, tj. 1 } int main() {………….. Vkládaná funkce může být i přetížená.

AUTOMATICKÉ VKLÁDÁNÍ ( in-lining ) Jestliže je definice členské funkce dostatečně krátká, může být zahrnuta přímo do deklarace třídy.Tím se automaticky stane in-line funkcí, je-li to možné. Je-li fce definována uvnitř deklarace třídy, nemusí se uvádět označení inline. Bude-li použito, není to chyba. Příklad: class vzorek{ int i, j; public: //konstruktor přebirající parametry: vzorek(int a, int b); Členská funkce je zde přímo definovaná a proto se stane automaticky in-line fcí int delitelny() { return !( i%j ); } }; // konec tridy vzorek Kompaktní a standardní způsob zápisu in-line fce. Kompaktní tvar je jednořádkový zápis fce. Vtlačovací styl je víceřádkový zápis fce. Nejběžnější použití pro in-line funkce definované v rámci třídy je definice konstruktoru a destruktoru.