PDA

Pogledaj cijelu verziju : Tutorijal - Virtualno nasljeđivanje u C++u



Tracer
11-10-2008, 22:46
C++ dopušta virtualno nasljeđivanje. Njime se sprečava konflikt zajedničkih pod-objekata klasa derivacija koje su nekoj drugoj klasi bazna klasa. Npr.:


#include <iostream.h>

class Boja
{
public:
virtual void Ime() = 0;
};
class Bijela : virtual public Boja
{
public:
void Ime(){
cout << "Bijela\n";
}
};
class Crna : virtual public Boja
{
public:
void Ime(){
cout << "Crna\n";
}
};
class Siva : public Bijela, public Crna
{
public:
void Ime(){
cout << "Siva\n";
}
};
int main()
{
Boja* x = new Siva;
x->Ime();
delete x;
return 0;
}

Taj konflikt nastaje kada vrhovnu baznu klasu Boja želimo adresirati na objekt tipa Siva. Klasa Bijela i Crna su obje nastale nasljeđivanjem od klase Boja. Zbog toga u svakoj od njih se nalazi pod-objekt klase Boja. Međutim, kada nastaje klasa Siva koja nasljeđuje Bijela i Crna tada nastaje konflikt jer se nezna koji pod-objekt klase Boja će se koristiti: Da li onaj iz klase Bijela ili iz klase Crna. Kojem će se dati prednost?

Zbog toga smo nasljeđivanje definirali kao virtualno:

class Bijela : virtual public Boja
class Crna : virtual public Boja

Sada se neće dogoditi dupliciranje pod-objekta Boja, i biti će omogućeno adresiranje pokazivača tipa Boja na objekt tipa Siva iako nije direktno nastao nasljeđivanjem iz klase Boja. Također, virtualna funkcija Ime se sada može predefinirati po volji. Inače, ovo je primjer "dijamantne" strukture nasljeđivanje u C++u.

Nadam se da vam je ovo bar malo jasno :D

RayDX
12-10-2008, 02:55
Lijep tekst! Svaka čast.