| Č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.
| 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.
| 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í:
|
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.
|
| Flashová animace |
|
Kliknutím na ikonu spustíte animaci.
|