2.8. Úvod do tříd

Časová náročnost
Časová náročnost: 20 minut

Snad nejdůležitějším prvkem jazyka C++ je třída. Je to mechanismus používaný k vytváření objektů. Jako taková je třída srdcem mnoha prvků jazyka C++.

Třída je deklarována klíčovým slovem class. Syntaxe deklarace class vypadá v obecném tvaru takto:

upozornění
class jméno-třídy
{
    // privátní funkce a proměnné
 public:
    // veřejné funkce a proměnné
} seznam-objektů


Seznam objektů je v deklaraci třídy nepovinný. Stejně jako strukturu, můžeme deklarovat objekty třídy později - až budou potřeba. Zatímco jméno třídy je také technicky nepovinné, z praktického hlediska je vždy potřeba. Je to proto, že jméno třídy se stává novým typem jména použitého k deklaraci objektů třídy.

Funkce a proměnné deklarovány uvnitř deklarace třídy jsou označovány jako členy této třídy. To znamená, že jsou přístupné pouze pro ostatní členy třídy. Pro deklaraci členů veřejné třídy se použije klíčové slovo public:. Všechny funkce a proměnné takto deklarované jsou přístupné pro členy třídy a i pro další části programu, který obsahuje třídu.

Příklad jednoduché deklarace třídy.

Jednoduchý příklad
Příklad:
class mojetrida
{
    int a; // privatni promenna
 public:
    void nastav_a(int num);
	int cti_a();
};


Tato třída má pouze jednu privátní proměnnou a a dvě veřejné funkce nastav_a(int num) a cti_a(). Funkce které jsou deklarovány uvnitř třídy se nazývají členské funkce.

Jelikož a je privátní není dostupná pro žádný kód vně mojetrida. Ovšem veřejné funkce mohou být volány každou částí programu, která mojetrida obsahuje.

Ačkoliv jsou funkce nastav_a(int num) a cti_a() deklarovány, nejsou ještě definovány. Abychom definovaly členskou funkci musíme spojit typové jméno třídy se jménem funkce a to pomocí dvojice dvojteček ::. Dvojice dvojteček se nazývá operátor rozlišení oblasti.

Ukažme si jak mohou být funkce definovány:

Jednoduchý příklad
Příklad:
void mojetrida::nastav_a(int num)
{
 a = num;
}

int mojetrida::cti_a()
{
 return a;
}


Obecný tvar pro definici členské funkce:

upozornění
return-type jméno-třídy::jméno-funkce(seznam-argumentů)
{
 // tělo funkce
}


Deklarace mojetrida nedefinueje žádný objekt typu mojetrida. Definuje pouze typ objektu, když bude deklarován.

Následující řádek deklaruje dva objekty typu mojetrida.

Jednoduchý příklad
Příklad:
mojetrida obj1, obj2;


Poté co vytvoříme objekt třídy může se program odkazovat na jeho veřejné členy pomocí tečkových operátorů.

Jednoduchý příklad
Příklad:
obj1.nastav_a(10);
obj2.nastav_a(5);


Tyto příkazy nastaví kopii obj1 na 10, kopii obj2 na 5. Každý objekt obsahuje vlastní kopii všech dat deklarovaných uvnitř třídy. Tedy obj1 je odlišné od a vázaného na obj2.

upozornění Deklarace třídy je pouze logická abstrakce, jež definuje nový typ. Určuje, jak bude objekt daného typu vypadat. Teprve deklarace objektu vytváří fyzickou entitu daného typu. Objekt totiž zabírá paměť, ale definiční typ ne.

Každý objekt třídy má svou vlastní kopii každé z proměnných deklarovaných uvnitř třídy.

Následující příklad předvádí třídu mojetrida popsanou výše.

src/2_3.cpp
Příklad 2.3.
#include <iostream.h>

class mojetrida 
{
  int a;
public:
  void nastav_a(int num);
  int cti_a();
};

void mojetrida::nastav_a(int num)
{
  a = num;
}

int mojetrida::cti_a()
{
  return a;
}

int main()
{
  mojetrida obj1, obj2;

  obj1.nastav_a(10);
  obj2.nastav_a(5);

  cout << obj1.cti_a() << "\n";
  cout << obj2.cti_a() << "\n";

  return 0;
}

flash\uvodtrid.swf
Flashová animace
Kliknutím na ikonu spustíte animaci.