B
Gozyu schrieb:
den unteren Code verstehe ich bis auf das Katzen töten
mit "töten" meine ich einfach, die in der map gespeicherten Objekte zu zerstören. Jedes Objekt hat eine Lebenszeit. Du wirst schon mit Objekten mit automatischer Lebensdauer gearbeitet haben:
int main() {
Cat frisky; // frisky beginnt zu existieren
// ...
} // Block-Ende: frisky wird zerstört
Objekte die mit new auf dem Freispeicher angelegt werden, haben eine dynamische Lebensdauer, die nicht durch die Blockstruktur des Programms vorgegeben ist. Deshalb müssen sie von Hand zerstört werden ... mit Hilfe des delete-Operators, wie im Beispielprogramm.
aber das Grundprinzip ist mir leider nicht klar.
Falls ich jetzt die Objekte einfach durchnummeriere, und ihr Name einfach eine Eigenschaft ist, muss ich den obigen Code verwenden oder?
Ich bin mir nicht sicher, ob ich verstehe, wovon du sprichst. Du meinst, du willst ein Array von Katzen haben? Dann sind sie durchnummeriert ...
Cat katzen[10]; // erzeugt 10 Katzen auf einmal
...
katzen[7].meow(); // Zugriff auf Katze Nr. 7 (Zählung von 0 bis 9)
Oder haben die Katzen einen Konstruktor, mit dem man ihre Namen festlegen kann? Dann nimm ein Array von Zeigern:
Cat *katzen[10];
for (int i = 0; i < 10; ++i)
{
string name;
cout << "Katze Nr. " << i << " soll wie heißen? :";
cin >> name;
katzen[i] = new Cat(name);
}
...
for (int i = 0; i < 10; ++i)
delete katzen[i];
Oder irgendeine andere Containerklasse (vector z.B.).
Cat *pcat;
Was bewirkt das jetzt genau?
Das definiert eine Variable vom Typ "Zeiger auf Cat". Ein Zeiger repräsentiert den Speicherort eines Objektes (die Adresse). Da der new-Operator die Adresse eines neu angelegten dynamischen Objektes zurückgibt, verwendet man Zeiger unter anderem, um mit dynamischen Objekten umzugehen.
BTW ich hab eigentlich nicht vor, dir das Lesen des Buches zu ersparen.