gutefrage.net, die Ratgeber Community
version2_beta
Login   |  Forum |  Richtlinien |  FAQ

Factorymuster bei C++

gefragt von CuchulainnCuchulainn 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:

Computer (17662)
PC (8460)
Programmierung (125)
ähnliche Fragen

Frage beantworten!


geige
beantwortet von geige am 23. Juli 2008 10:00
0x
Die Antwort ist hilfreich? Dann klick mich!

Bitte gib mal die genaue Fehlermeldung an.

Kommentar von B4a106e4893fd452df0001eaeecf9d7esmallCuchulainn am 23. Juli 2008 10:11

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() {

  return new KonkretesProdukt(); // Hier tritt ein Fehler auf

} };

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() {

  return new KonkretesProdukt(); // Hier tritt ein Fehler auf

} };

lautet der Fehler: Produkt is an inaccessible base of KonkretesProdukt

Kommentar von 5158c3ec2673b97e7143207edfb155cesmallgeige am 23. Juli 2008 10:17

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. };

Kommentar von 5158c3ec2673b97e7143207edfb155cesmallgeige am 23. Juli 2008 10:24

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





Verwandte Fragen

Verwandte Fragen


Mehr verwandte Fragen

Verwandte Fragen
Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Bitte lesen Sie hierzu auch unsere Rechtlichen Hinweise.