Cuchulainn am 23.07.2008 um 9:43 Uhr
Ich möchte gerne bei C++ das Factorymuster implementieren. So ungefähr sieht das aus:
class Fabrik {
virtual Produkt * create() = 0;
};
class KonkreteFabrik: Fabrik { Produkt* create() { return new KonkretesProdukt(); // Hier tritt ein Fehler auf } };
class Produkt { // da steht etwas. };
class KonkretesProdukt: Produkt { // das steht was anderes. };
Jetzt bin ich mir nicht ganz sicher, wie Polymorphie unter C++ funktioniert. Da läuft ja dann wahrscheinlich alles mit Zeigern und so. Mit Java ist das kein Problem. Wie kann so ein Factorymuster richtig implementiert aussehen?
Weitere Fragen zu verwandten Themen finden Sie hier:
Es hängt davon ab, wie ich die Create-Methode aufbaue. Wenn ich schreibe:
class Fabrik {
virtual Produkt * create() = 0;
};
class KonkreteFabrik: Fabrik {
KonkretesProdukt* create() {
} };
erhalte ich die Meldung: invalid covariant return type for `virtual KonkretesProdukt* KonkreteFabrik::create()'
Wenn ich es folgendermaßen mache (Klasse Fabrik bleibt gleich):
class KonkreteFabrik: Fabrik {
Produkt* create() {
} };
lautet der Fehler: Produkt is an inaccessible base of KonkretesProdukt
Du mußt die Ableitung von Produkt public machen. Die Ableitung von Produkt ist per default private. Damit ist der Konstruktor nicht von abgeleiteten Klassen her aufrufbar.class KonkretesProdukt: public Produkt { // das steht was anderes. };
Ja genau. inaccessible base of KonkretesProdukt heisst, dass auf die Basisklasse Produkt nicht zugegriffen werden kann, da die Ableitung in C++, wenn man nichts sagt private ist. Die Ableitung muss public sein, d.h. class KonkretesProdukt : public Produkt und nicht class KonkretesProdukt : Produkt was der Compiler mit class KonkretesProdukt : private Produkt interpretiert