In der objektorientierten Programmierung dienen abstrakte Klassen als Blaupausen für andere Klassen, von denen sie erben können. Aufgrund ihrer Unvollständigkeit können sie jedoch nicht direkt instanziiert werden. Diese Einschränkung erstreckt sich auf die Deklaration eines std::vector einer abstrakten Klasse und löst einen Fehler aus, der besagt: „Abstrakte Klasse kann nicht instanziiert werden.“
Abstrakte Klassen werden rein virtuell deklariert Funktionen, die keine Implementierung haben. Dies bedeutet, dass es sich nicht um konkrete Einheiten handelt, die als Objekte erstellt werden können. Stattdessen sollen sie vererbt und ihre abstrakten Funktionen in den untergeordneten Klassen implementiert werden.
Um dieses Problem zu lösen, gibt es zwei Hauptproblemumgehungen:
Vektor von Zeigern auf abstrakte Klassen:
Anstatt a zu deklarieren std::vector von abstrakten Klassen können Sie einen std::vector von Zeigern auf abstrakte Klassen verwenden. Dadurch können Sie Instanzen untergeordneter Klassen speichern und gleichzeitig das polymorphe Verhalten beibehalten.
std::vector<IFunnyInterface*> ifVec;
Abgeleiteter Klassenvektor:
Anstatt eine abstrakte Klasse zu verwenden, können Sie kann eine abgeleitete Klasse erstellen, die von der abstrakten Klasse erbt und konkrete Implementierungen aller ihrer virtuellen Funktionen bereitstellt. Anschließend können Sie einen std::vector dieser abgeleiteten Klasse deklarieren.
class FunnyDerived : public IFunnyInterface { // Implement abstract function }; std::vector<FunnyDerived> fdVec;
Obwohl es kontraintuitiv erscheinen mag, die Erstellung von std::vectors einzuschränken Bei abstrakten Klassen handelt es sich um einen grundlegenden Aspekt der objektorientierten Programmierung. Durch die Verwendung von Zeigern auf abstrakte Klassen oder abgeleitete Klassen können Sie Flexibilität und Polymorphismus beibehalten und gleichzeitig die Einschränkungen abstrakter Klassen einhalten.
Das obige ist der detaillierte Inhalt vonWarum kann ich keinen „std::vector' abstrakter Klassen erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!