2016-03-28 2 views
-2

Ich bin noch etwas neu in C++ und ich bin unsicher über das Erstellen verschiedener Instanzen innerhalb einer Liste. In meinem Programm habe ich mehrere Klassen von der Basisklasse erben:Wie würde ich mehrere Klassen innerhalb einer Variablen speichern, vielleicht eine Liste? oder Vektor? Polymorphismus

class Foo{ 

} 

class Bar : public Foo { 

} 

class Fin : public Foo { 

} 

Das Problem, das ich bin vor, das ich mit einem anderen im Fall ersetzen muß einen zerstört wird. Zum Beispiel:

for (int i = 0; i < list/vector/? ; i++){ 
    if (bar_i[i].destroyed()){ 
     Fin fin_i = new Fin(); // in place of Bar 
    } 
} 

was würde dann die Bar (s) vor Ort nehmen. Was könnte ich verwenden, um eine Liste, einen Vektor oder was auch immer zu erstellen, um die Instanzen mehrerer Klassen zu erstellen?

+1

macht keinen Sinn, "eine Klasse speichern". Sie möchten * Instanzen von * verschiedenen Klassen in einer Liste speichern? – immibis

+0

Bearbeitet. Vielen Dank. –

Antwort

1

In den Standardcontainern können nicht verschiedene Typen gespeichert werden (für einen Standardcontainer müssen alle Elemente vom selben Typ sein).

Sie können jedoch Polymorphie verwenden und Zeiger auf einen übergeordneten (gemeinsamen) Typ speichern.

Sie möchten vielleicht Ihr Design überdenken und allgemeine Methoden und Member zu einem übergeordneten Typ verschieben.

Edit 1: Beispielimplementierung

std::vector<Foo *> container; 
for (unsigned int i = 0; i < 6; ++i) 
{ 
    if (i & 1) 
    { 
    container.push_back(new Bar); 
    } 
    else 
    { 
    container.push_back(new Fin); 
    } 
} 
    for (unsigned int i = 0; i < 6; ++i) 
    { 
    container[i]->Common_Operation(); 
    } 
+0

okay Ich mag was du sagst. Aber wie würde ich das umsetzen? Wie würde ich Zeiger verwenden, um dann auf die Kindklasse zuzugreifen? –

+1

@DylanLittle: Siehe meine Edit 1. Suchen Sie auch im Internet nach "C++ Polymorphismus Zeiger" oder "C++ Dispatch-Beispiel". –