Ich weiß über Virtual Class, dass sie nicht, nun instanziiert werden kann ich eine Frage zu einem Fall darüber haben, nehmen wir eine reine abstrakte Klasse wie unten haben:Wie verwende ich eine abstrakte Klasse in einer anderen Klasse (oder einer Klasse)?
class Color{
public:
Color();
virtual string getName()=0;
~Color();
};
und 2 Klasse vererbte Form es:
class Blue:public Color
{
public:
Blue();
~Blue();
string getName();
};
class Red:public Color{
public:
Red();
~Red();
string getName();
};
und dritte Klasse wollen Color
Klasse als Konstruktorparameter und Datenelement verwenden:
class Foo{
public:
Foo();
Foo(Color&);
~Foo();
void draw(Color&);
private:
Color* co;
};
und seine Umsetzung:
Foo::Foo():co(new Color()){
}
Foo::Foo(Color &c):co(new Color(c)){
}
Jetzt
, weiß ich über diesen Teil new Color()
und new Color(c)
in diesem Fall falsch ist, aber ich möchte nur eine Art Color
zu übergeben Foo
und nicht direkt Blue
oder Red
mit verwenden, als Parameter.
Was ist eine Lösung? Muss ich überladen oder etwas anderes benutzen? und für Methode draw
habe ich irgendein Problem? und ich lese über Entwurfsmuster, hilft es mir über diesen Fall?
tnx für Ihre Antwort.
"co" als Nullzeiger im Standardkonstruktor initialisieren? –
@Joachim Pileborg Nein, ich habe es nicht benutzt. – mehdi