Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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.

Podobné prezentace


Prezentace na téma: "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."— Transkript prezentace:

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

2 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)

3 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

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

5 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í

6 5 Konstantní instance tříd ukázka
class RealneCislo { public: const double PI; RealneCislo():PI( ) {} RealneCislo(double Arg):PI( ) {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; }

7 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é

8 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)

9 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; }

10 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.

11 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)

12 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. )

13 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 }

14 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();

15 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

16 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); }

17 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

18 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;

19 Konec přednášky


Stáhnout ppt "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."

Podobné prezentace


Reklamy Google