Úvod do objektově orientovaného programování v C++

C++ Pokročilé konstrukce Zdrojákoviště Dočasná kategorie Úvod do objektově orientovaného programování v C++

Objekty jsou velice užitečné, mohou popisovat prakticky cokoli. Člověka, budovu, typ auta, ale i jednotlivé atomy, nebo naopak celé planety.

Deklarace objektu začíná klíčovým slovem class. Pak následuje identifikátor (jméno pro novou třídu) a složené závorky. Do těch se zapisují proměnné, které bude mít každý objekt (instance) danné třídy a funkce (které v oop nazýváme metody), pomocí kterých s objektem pracujeme (s proměnnými, které do tohoto objektu patří).

Konstruktor a destruktor

Každá třída má nějaký konstruktor. Ten vypadá asi jako funkce bez návratové hodnoty a beze jména a má za úkol vytvořit objekt. Stejně jako ostatní funkce se dá i konstruktor přetížit. Jako identifikátor se tedy používá jméno třídy. Konstruktor má navíc tzv. inicializační část, kde můžeme nastavit hodnoty datových složek třídy. Reference a konstanty se v inicializační části konstruktoru musí nastavit povinně.

moje_trida::moje_trida(int _x, double _y):x(_x), y(_y){}

Destruktor naproti tomu připravuje objekt k zániku (například uvolňuje přidělenou paměť). Destruktor vypadá podobně jako konstruktor, jen před jeho "název" připojíme vlnovku (~). Pokud konstruktor nebo destruktor nevytvoříme, vytvoří ho za nás překladač.

Přístupová práva

Každá proměnná nebo funkce navíc může být veřejná, soukromá nebo chráněná. Tato vlastnost je určena tím, jaký z identifikátorů public:(veřejný), private:(soukro­mý) nebo protected:(chrá­něný) byl uveden naposledy. Proměnné a funkce deklarované před prvním z těchto identifikátorů jsou soukromé.

Zapouzdření

U tříd se navíc dodržuje zapouzdření. To znamená, že k proměnným (=datovým složkám) se bude přistupovat jen pomocí přístupových metod (set_název_po­ložky a get_název_polož­ky) a tedy budou všechny soukromé (to můžeme porušit u konstant).

class atom{
        unsigned protonove_cislo;
        int naboj;
public:
        atom(unsigned _protonove_cislo): protonove_cislo(_protonove_cislo){};
        unsigned get_protonove_cislo(){return protonove_cislo;}
        int get_nabo{return naboj;
        }
        void set_naboj(int _naboj){naboj = _naboj;}
}

Definice funkcí se navíc píší mimo definici třídy. Pokud bychom chtěli např. třídu popisující nějakého člověka, mohli bychom začít asi takhle:

class person{
        string name;
        int hight;
        int age;
public:
        person();
        person(string _name);
        person(string _name, int _age);
        person(string _name, int _age, int _hight);
        string get_name();
        int get_age();
        int get_hight();
        void set_name(string _name);
        void set_age(int _age);
        void set_height(int _hight);
};
person::person(){}
person::person(string _name): name(_name){}
person::person(string _name, int _age): name(_name), age(_age){}
person::person(string _name, int _age, int _hight): name(_name), age(_age), height(_height){}
string person::get_name()
{
        return name;
}
int person::get_age()
{
        return age;
}
int person::get_height()
{
        return height;
}
void person::set_name(string _name)
{
        name = _name;
}
void person::set_age(int _age)
{
        age = _age;
}
void person::set_height(int _hight)
{
        height = _height;
}

A to by pro začátek mohlo stačit.


 

  Aktivity (3)

Článek pro vás napsal Zdeněk Pavlátka
Avatar
Autor se věnuje spoustě zajímavých věcí :)

Jak se ti líbí článek?
Celkem (4 hlasů) :
3.53.53.53.5 3.5


 


Miniatura
Všechny články v sekci
Dočasná kategorie

 

 

Komentáře

Avatar
Lukáš Hruda (Luckin):

Je fajn, že se někdo začal zajímat o C++. Tutoriál se mi celkem líbí, ale řekl bych, že bys měl ještě popsat tvorbu objektů (staticky/dyna­micky) a jejich inicializaci, aby bylo jasné, jak konstruktory a destruktory fungují, co přesně dělají a hlavně kdy se volají. :)

Editováno 13.3.2013 20:58
 
Odpovědět  +2 13.3.2013 20:57
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Zdeněk Pavlátka:

To bude v dalším článku, nechtěl jsem žadné dlouhé texty. Přidám i struktury a unie.

Odpovědět 14.3.2013 9:36
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Redaktor
Avatar
Kit:

Uvolnění paměti je až poslední činností destruktoru. Destruktory se píší zejména proto, aby se uvolnily ostatní prostředky (např. uzavřely otevřené soubory) ještě před tímto uvolněním paměti.

Odpovědět 14.3.2013 9:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovědět 14.3.2013 9:51
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Lukáš Hruda (Luckin):

Sám jsem přemýšlel, že bych nějaký tutorial na C++ napsal, nejsem si ale jist, jestli mám schopnost to správně vysvětlit, navíc na to teď nemám moc čas.

 
Odpovědět 14.3.2013 11:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.