1 / 13

Seminář C++

Seminář C++. 3. cvičení Třídy. Ing. Jan Mikulka. Pojem Třída. Třídy slouží ke spojení (zapouzdření) dat a funkcí do jednoho (nového) typu Umožňují předepisovat různá oprávnění k přístupu k jednotlivým prvkům class Priklad { int Hodnota; // soukromé (private)

Download Presentation

Seminář C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Seminář C++ 3. cvičení Třídy Ing. Jan Mikulka

  2. Pojem Třída • Třídy slouží ke spojení (zapouzdření) dat a funkcí do jednoho (nového) typu • Umožňují předepisovat různá oprávnění k přístupu k jednotlivým prvkům class Priklad { int Hodnota; // soukromé (private) public: // veřejné (public) Priklad() // konstruktor {Hodnota=1;}; protected: // chráněné (protected) int treti() { return Hodnota;}; private: // soukromé (private) int Posledni(); };

  3. Systém přidělování práv • deklarace před první specifikací přístupových práv jsou automaticky považovány za soukromé (private) ve třídách class. veřejné (public) ve strukturách struct a unionech union.

  4. Metody • nebo-li členské funkce, funkce součástí třídy • Mohou být deklarovány jako public, protected, private • virtual, inline • Mohou být přetěžovány pouze členskými funkcemi stejné třídy • Mají přístup ke všem prvkům své třídy bez ohledu na přístupová práva • Jsou jediným prostředkem s funkcemi typu friend, jak získat přístup k soukromým prvkům- private. • Metody mohou být deklarovány jak uvnitř, tak vně deklarace třídy • Metody definované uvnitř definice třídy jsou překládány jako inline

  5. Definice metody vně class test { int n; public: test() {n=1;} int Test3Vrat() const {return n;} //definice int Test4Smaz(); //definice }; inline test::Test4Smaz() {n=0;}

  6. Přístup k prvkům třídy class test { private: int n1, n2; int fun1() {return n1*n2;} public: void fun2(int j) { n1=j+1; n2=fun1(); } }; test z; // z je instancí třídy test z.fun2(222); // Změna z.n1 a z.n2

  7. Přetěžování metod class Zaklad { public: void fun1(int); }; class Odvozena:Zaklad { public: void fun1(char*); }; void main() { Odvozena odv; // Případ třídy Odvozena odv.fun1(3); // Chyba odv.Zaklad::fun1(3); // Správně return 0; }

  8. Zvláštní metody - konstruktor • Konstruktor má vždy stejné jméno jako jeho třída • Konstruktor nemá žádnou návratovou hodnotu • Pokud konstruktor nedeklarujeme, překladač v třídě sám vytvoří veřejně přístupný konstruktor bez parametrů • Pokud explicitně deklarujeme jakýkoliv konstruktor, nebude překladač žádný další vytvářet • Konstruktory mohou být přetěžovány • Konstruktory se nedědí, konstruktor potomka automaticky volá konstruktory bezprostředních prvků • Konstruktory, které mají právě jeden parametr, mohou provádět konverzi na typ své třídy • Konstruktor se volá při dynamické alokaci případu pomocí operátoru new

  9. Příklad konstruktoru class test { int privat; public: test(int i){privat=1;} //Konstruktor explicit test(float g) {privat=(int)g;} }; void main() { test pripad(100); test pripad2=100; //Implicitní konverze test pripad3(3.2); test pripad4=3.2; //Chyba: explicitní konverze parametru není return 0; }

  10. Zvláštní metody - destruktor • Destruktory se volají automaticky při zániku případu (například delete – zrušení dynamické proměnné). • Destruktor nemá žádnou návratovou hodnotu • Pokud v třídě nedeklarujeme explicitně destruktor, vytvoří si překladač veřejně přístupný standardní destruktor • Destruktor se nedědí • Destruktor nemá žádné parametry • Destruktory mohou být i virtuální • Destruktory můžeme explicitně volat

  11. Ukazatel this • ukazatel na aktuální instanci class complex { double Re, Im; public: complex(double _Re, double _Im):Re(_Re), Im(_Im){} double Real(); double Imag(); }; double complex::Real(){return Re;} double complex::Imag(){return Im;} V metodě Real() je příkaz return Re vlastně return this->Re

  12. Jak přistupovat k metodám a datům třídy v aplikaci • Jména deklarovaná uvnitř třídy jsou dostupná i mimo třídu když jsou zapsány případem (operátor tečka), ukazatelem na případ (operátor ->), někdy jménem třídy (operátor ::) • objekt. • objekt-> • objekt::

  13. Zadání cvičení • 1. Pomocí tříd sestavte program pro násobení dvou matic A a B • 2. Pomocí tříd sestavte program pro součet dvou matic A a B • program umístěte do samostatného hlavičkového souboru, nakreslete vývojový diagram • použití nového „cout <<“ místo „printf()“ • bodování: funkce (1 bod), rychlost (1 bod), stabilita a délka prog. (1 bod), implementace v hl. souboru (1 bod)

More Related