Zacząłem właśnie książkę "Rusz głową! Wzorce projektowe".
Na początku jest w niej taki przykład pisany w Javie:
public abstract class KwakanieInterfejs
{
public void kwacz();
};
public class Kwacz implements KwakanieInterfejs
{
public void kwacz()
{
println(" kwa! kwa! ");
}
};
public class DzikaKaczka extends Kaczka
{
public DzikaKaczka()
{
kwakanieInterfejs = new Kwacz();
}
};
public abstract class Kaczka
{
KwakanieInterfejs kwakanieInterfejs;
public void wykonajKwacz()
{
kwakanieInterfejs.kwacz;
};
};
int main()
{
Kaczka dzika = new DzikaKaczka();
dzika.wykonajKwacz();
}
Jak coś podobnego można zrobić najbardziej elegancko w c++?
Jedyne co mi przychodzi do głowy to zrobić coś takiego:
class Kaczka
{
public:
Kaczka();
virtual ~Kaczka();
void wykonajKwacz(Kwacz1 kwaknij)
{
kwaknij.kwacz();
};
void wykonajKwacz(Kwacz1 kwaknij)
{
kwaknij.kwacz();
};
void wykonajKwacz(Kwacz3 kwaknij)
{
kwaknij.kwacz();
};
};
class DzikaKaczka : public Kaczka
{
public:
DzikaKaczka();
virtual ~DzikaKaczka();
WykonajKwacz()
{
wykonajKwacz(kwacz);
}
protected:
Kwacz1 kwacz;
};