Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.

C++: Wie speichere ich am besten verschiedene Objekte.?

Problem, bei Spielentwickung. Ich habe bis jetzt alle Objekte in verschiedenen globalen Arrays gespeichert...

Stein steine[max_stein_count];

Spieler spieler[max_spieler_count];

...aber jetzt ist ein Haufen anderer Klassen hinzugekommen und der Programmteil, in dem der Frame gemalt wird ist mittlerweile voller for-Schleifen, die die ganzen unterschiedlichen Arrays auslesen. Wie fasse ich das am besten in ein Array zusammen?

Update:

@ALi

damit kann man Zeichenketten zusammenfügen, aber das hat gar nichts mit meinem Problem zu tun.

Lösung hat sich mittlerweile selbst gefunden:

Wenn man sagt Derived ist ein Base, kann man mit nem Zeiger auf Base auch auf Deriveds zeigen.

Object* tree = new Tree;

Object* keks = new Keks;

geht beides ohne Probleme.

2 Antworten

Bewertung
  • vor 1 Jahrzehnt
    Beste Antwort

    Der Ansatz ist meines Erachtens schon unglücklich. Merke Global ist immer sch..., da weder reintrant noch portabel.

    Üblicherweise werden in C solche Daten in eine globale Struktur und in C++ in eine globale Klasse mit genau einer Instanz abgelegt. Um hier noch was zu retten solltes du vieleicht versuchen zumindest eine globale struktur/union eventuell sogar eine Klasse anzulegen in der diese. Das was du in deiner ergäntzung beschreibst ist die Vererbung. Für Vererbung gilt in allen objektorientierten Sprachen, das die Referenzen oder Zeiger "Abwärtskompatibel sind." Das heisst eine Klasse Objekt ist eine Basiskklasse aller abgeleiteten Klassen. Ihr kann immer jedes Objekt der abgeleiteten Klasse zugewiesen werden. Das ganze hat aber einen Nachteil. Du kannst zwar die Zeiger hierüber verwalten. Um auf die abgeleitete Klasse zugreifen zu können musst du einen (cast) vornehmen in deinem Beispiel

    ((Tree)tree)->element_von_Tree

    ((Keks)tree)->Funktion_von_Keks()

  • vor 1 Jahrzehnt

    strcat (blabal, blabla, usw blabla);

Haben Sie noch Fragen? Jetzt beantworten lassen.