3.2. Dědičnost

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

Dědičnost nám v C++ umožňuje, aby jedna třída zdědila vlastnosti jiné třídy. Je však nutné si definovat některé základní termíny. Když je třída děděná jinou, pak je třída, která je děděna, nazývána základní třídou. Dědící třída je pak nazvána odvozenou třídou. Obecně začíná proces dědění definicí základní třídy. Základní třída definuje všechny vlastnosti, které budou společné pro všechny odvozené třídy. Odvozená třída pak tyto obecné rysy dědí a přidává k nim vlastnosti, které jsou specifické pro danou třídu.

Na následujícím příkladu si ilustrujeme mnoho klíčových vlastností dědičnosti.
Jednoduchý příklad
Příklad:
// definice základní třídy
class base {
  int i;
public:
  void set_i(int n);
  int get_i();
};

// definice odvozené třídy
class derived : public base {
  int j;
public:
  void set_j(int n);
  int mul();
};


Po jménu třídy derived je dvojtečka následována klíčovým slovem public a jménem třídy base. Překladači se tím říká, že třída derived bude dědit všechny prvky třídy base. Klíčové slovo public překladači říká, že base bude děděno tak, že všechny veřejné prvky základní třídy budou rovněž veřejnými prvky odvozené třídy. Ovšem všechny privátní prvky základní funkce zůstanou jejími privátními prvky a nebudou přímo dosažitelné žádnou odvozenou třídou.

src/3_5.cpp
Příklad 3.5.
#include <iostream.h>

// Zakladni trida
class base {
  int i;
public:
  void set_i(int n);
  int get_i();
};

// Odvozena trida
class derived : public base {
  int j;
public:
  void set_j(int n);
  int mul();
};

// nastaveni hodnoty i v zakladni tride
void base::set_i(int n)
{
  i = n;
}

// vraceni hodnoty i do zakladni tridy
int base::get_i()
{
  return i;
}

// nastaveni hodnoty j v odvozene tride
void derived::set_j(int n)
{
  j = n;
}

// vraceni hodnoty j v odvozene tride
int derived::mul()
{
  // odvozena trida muze volat verejne funkce zakladni tridy
  return j * get_i();
}

int main()
{
  derived ob;

  ob.set_i(10); 
  ob.set_j(4);  

  cout << ob.mul(); 

  return 0;
}



Všimněte si, že mull() volá funkci get_i(), která je členem základní třídy base, nikoliv třídy derived bez propojením s nějakým konkrétním objektem. Je to možné, protože veřejné členy base se staly veřejnými členy derived.

Obecný tvar pro dědění základní třídy je následující:

upozornění
class jméno-odvozené-třídy : přístupový-specifikátor jméno-základní-třídy {
 .
 .
 .
};


Příkazový specifikátor musí být jedno z následujících klíčových slov: public, private nebo protected.
flash\dedic.swf
Flashová animace
Kliknutím na ikonu spustíte animaci.