| Časová náročnost: 7 minut |
Mějme následující příklad:
V tomto příkladu je základní třída
Base děděna jak
Derived 1, tak
Derived 2.
Derived 3 přímo dědí obě třídy
Derived. To ale znamená, že
Base je děděna dvakrát. Jednou přes
Derived 1 a podruhé přes
Derived 2. Tím vzniká určitá nejednoznačnost.
C++ obsahuje mechanismus, který zajistí, aby k podobné nejednoznačnosti nedocházelo. Tato vlastnost se nazývá
virtuální třída. Zabrání se tím, aby se dvě nebo více kopii základní třídy objevily ve třídě odvozené, která dědí nepřímo základní třídu. Abychom určili, že třída je chápána jako virtuální uvedeme jako specifikátor klíčové slovo
virtual.
Výše popsaný příklad si nyní ukážeme.
| Příklad 7.8. |
|
#include <iostream.h>
class base {
public:
int i;
};
// dedim zakladni tridu jako virtualni
class derived1 : virtual public base {
public:
int j;
};
// dedim zakladni tridu jako virtualni
class derived2 : virtual public base {
public:
int k;
};
// v toto tride je base dedena pouze jednou
class derived3 : public derived1, public derived2 {
public:
int product() { return i * j * k; }
};
int main()
{
derived3 ob;
ob.i = 10;
ob.j = 3;
ob.k = 5;
cout << "Product is " << ob.product() << '\n';
return 0;
}
|