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.

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.
C++ Přednáška 1 Neobjektové rozšíření jazyka Základy vstupu a výstupu Ing. Jiří Kulhánek, kat. 352, VŠB TU Ostrava 2004.
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
Singleton 1 1.
Polymorfismus Dědičnost
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í.
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
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é.
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
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Objektové programování
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
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
Počítače a programování 1
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í.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
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.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
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.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – procedury Mgr. Lenka Švancarová.
Počítače a programování 1
Uživatelská rozhraní Cvičení 12a Martin Němec A
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é.
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.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
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.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
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é.
Y36PJC Programování v jazyce C/C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
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
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

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

1 Konstantní členy tříd Konstantní mohou být členské proměnné Konstantní mohou být členské metody Proměnné se označují const před datovým typem Metody se označují const za seznamem parametrů (před funkcí to označuje typ návratové hodnoty)

2 Inicializace konstantních členských proměnných Nelze je inicializovat při jejich definici Nelze je inicializovat v tělel konstruktoru Inicializují se za hlavičkou kostruktoru oddělené dvojtečkou

3 Konstantní členy tříd, ukázka class RealneCislo { public: const double PI; RealneCislo():PI(3.14159267) {} double Hodnota() const {return m_dblHodnota;} private: double m_dblHodnota; };  

4 Konstantní instance tříd Konstantní instance tříd může používat pouze konstantní členské metody Všechny členské proměnné konstantní instance navenek vystupují jako konstantní

5 Konstantní instance tříd ukázka class RealneCislo { public: const double PI; RealneCislo():PI(3.14159267) {} RealneCislo(double Arg):PI(3.14159267) {m_dblHodnota = Arg;} double Hodnota() const {return m_dblHodnota;} void NastavHodnotu(double Arg) {m_dblHodnota = Arg;} private: double m_dblHodnota; }; void main() { RealneCislo A; const RealneCislo B(15); A.NastavHodnotu(10); cout << B.Hodnota() << endl; }

6 Statické členy tříd Statické členské proměnné Statické členské metody Označují se slovem static před definicí proměnné nebo metody Statické členy tříd jsou nezávislé na instancích třídy, ale na rozdíl od globálních proměnných a funkcí jsou zapouzdřené

7 Statické členské proměnné Jejich životnost je po celou dobu běhu programu Jsou společné pro všechny instance třídy – jsou na nich nezávislé Inicializují se v globálním prostoru programu – obvykle se neinicializují v konstruktorech Přístup k proměnným z vnějšku je možný pomocí jménatřídy::proměnná nebo jménainstance.proměnná (pro public)

8 Statické členské proměnné ukázka /* obvykle v hlavickovem *.H souboru */ class Pocitadlo {public: Pocitadlo() { m_intPocet++;} ~Pocitadlo() { m_intPocet--;} inline int Hodnota() {return m_intPocet;} private: static int m_intPocet;}; /* tato cast by mela byt v CPP souboru*/ int Pocitadlo::m_intPocet=0; //inicializace void main() { Pocitadlo A,B; cout << A.Hodnota() << endl << B.Hodnota() << endl; { Pocitadlo C; cout << A.Hodnota() << endl; }

9 Využití statických členských proměnných Společné zapouzdřené proměnné – např. společný výstupní soubor, komunikační port COM1 atp. Počítadlo počtu instancí s možností pro první instanci soubor otevřít a pro poslední zavřít Statická členská proměnná typu Objekt se založí při startu programu – v jejím konstruktoru je možno realizovat ošetření inicializace programu, čtení hesla atp.

10 Statické členské metody Jsou nezávislé na instancích třídy Nemohou pracovat s nestatickými členskými proměnnými Pro práci s nestatickými členskými proměnnými musí použít ukazatel (this)

11 Využití statických členských metod Pro přístup ke statickým členským proměnným bez použití instancí Jako tzv. callback funkce pro komunikaci s jinými částmi programu, které vyžadují statické funkce (tvorba paralelních částí programů, zpracování zpráv Windows aj. )

12 Statické členské metody ukázka přístupu k stat. prom. class Pocitadlo { public: Pocitadlo() { m_intPocet++;} ~Pocitadlo() { m_intPocet--;} static int Hodnota() {return m_intPocet;} static void Nastav(int Arg) {m_intPocet = Arg;} private: static int m_intPocet; }; int Pocitadlo::m_intPocet=0; void main() cout << Pocitadlo::Hodnota() << endl; // bez instance Pocitadlo A; cout << A.Hodnota() << ensl; // s instanci }

13 Statické členské metody ukázka callback funkce class Data {public: Data() { for(int i=0; i<100 ;i++) m_intPole[i]=0;} Serad() {qsort(m_intPole,100,sizeof(int),Porovnej);} private: int m_intPole[100]; static int Porovnej(void* A, void* B); } int Data::Porovnej(void *A,int *B) { int *pA=(int*)A; int *pB=(int*)B; if (*pA==*pB) return 0; else if (*pA>*pB) return 1; else return -1; void main() { Data A; A.Serad();

14 Přístup k nestatickým proměnným ze statických metod Statické metody nemohou přímo přistupovat k nestatickým datům (je možné je spustit dřív než vznikne instance) Pokud mají mít přístup k datům, je třeba jim předat na data ukazatel nebo referenci jako argument Obvykle se předává ukazatel na třídu

15 Přístup k nestatickým proměnným - ukázka class Trida {public: Trida() { m_intData =0; } Trida(int Arg) {m_intData = Arg;} static int VynucenaStaticka(Trida* p); private: int m_intData;} int Trida::VynucenaStaticka(Trida* p) { return p->m_intData;} void main() { Trida A,B(5); A.VynucenaStaticka(&A); B.VynucenaStaticka(&A); Trida::VynucenaStaticka(&B); }

16 Ukazatel this Vnitřní ukazatel ukazující na právě prováděnou instanci Všechny členské metody (nestatické) mají jako první skrytý parametr právě this Statické metody this nemají Využití např. pro porovnávání argumentu se sebou samým, nebo pro spouštění statických metod

17 Ukazatel this ukázka class Zlomek {public: Zlomek() {m_intCit=0;m_intJme=1;} Zlomek& Inc() // zvysi zlomek o jednicku a vrati jej zpet { m_intCit+=m_intJme; return *this; } double Hodnota() { return m_intCit/(double)m_intJme;} private: int m_intCit,m_intJme; void main() Zlomek A; cout << A.Inc().Inc().Inc().Hodnota() << endl;

Konec přednášky