Ich habe mir das Thema noch einmal durchgelesen. Ich versuche die Listen so zu nehmen, wie sie sind.
Eventuell kann ich kurz erläutern, wie ich das verstehe:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>
#include <list>
using namespace std;
class CRaumschiff{
private:
int m_ID;
public:
CRaumschiff(int ID){
m_ID = ID;
cout << "Raumschiff erstellt! " << endl;
}
~CRaumschiff(){cout << "Raumschiff zerstoert! " << endl;}
void Starten(){
cout << "Raumschiff startet ,,, " << endl;
cout << "ID lautet: "<< m_ID << endl;
}
};
int main() {
list<CRaumschiff*> lSchiffe;
list<CRaumschiff*>::iterator i;
int Anzahl = 0;
CRaumschiff *Temp = nullptr;
cout << "Wie viele Raumschiffe sollen erzeugt werden: " ;
cin >> Anzahl;
for (int j=0; j < Anzahl; j++){
Temp = new CRaumschiff(j+1);
lSchiffe.push_back(Temp);
}
system("Pause");
return 0;
}
|
Das Beispiel ist nicht vollständig. Also, ich erstelle mir eine List. In den Klammern gebe ich den Datentyp der zu speichernden Elemente an. In dem Fall ein Zeiger auf Klassen-Instanzen. Da die Liste eben Zeiger enthält, reserviere ich mit "new CRaumschiff" speicher auf dem Heap. Temp zeigt auf das erste Klassenobjekt bzw. dessen Adresse. Diese Adresse schiebe ich über Temp in die Liste. Dann überschreibe ich Temp bzw. lasse Temp auf die Adresse des zweiten Klassenobjekts zeigen und schiebe diese erneut in die Liste. Über den Iterator kann ich dann auf alle Zeiger zugreifen. In dem Fall ist es ja egal, dass ich durch das Überschreiben von Temp die alten Adressen überschreibe, da diese ja in der Liste weiterhin exisieren.
Das ist das, was ich als Anfänger bisher verstanden habe.
Aber auch hier muss ich mich an manche Schreibweisen gewöhnen wie die Ausgabe über die Klassenfunktion:
|
C-/C++-Quelltext
|
1
2
3
|
for (i=lSchiffe.begin(); i!=lSchiffe.end(); i++){
(*(*i)).Starten();
}
|
In dem Fall liefert *i ja nur die Adresse, da die Elemente der Liste Zeiger sind. Daher doppelt deferenzieren. Aber es ist ist gewöhnungsbedürftig, wenn *i die Adresse liefert, was liefert dann ( i )?