Unrest Geschrieben 29. Juli 2009 Geschrieben 29. Juli 2009 Guten Morgen zusammen, ich habe zur Übung meiner brachliegenden C-Fähigkeiten ein "Game of Life" für die Konsole geschrieben. In C funktionierte das problemlos und gut, jedoch macht mir das Umschreiben nach C++, bzw. nach OOP, Probleme. Und zwar benötige ich zwei Objekte namens "grid" und "future_grid", welche jeweils ein gleich großes 2dimensionales Array beinhalten und diverse Methoden. Die Größe des/-r Arrays ist vom Benutzer festzulegen, was dynamische Speicherverwaltung nötig macht. Mein Ansatz war im private Bereich "int** grid" zu deklarieren, im Konstruktor dann mittels "grid = new int*[height]" und in ner for{} dann jedem Element von grid ein "new int [width]" hinzufügen. Ziel war es dabei das Feld dann mit stinknormaler Array-Syntax anzusprechen. Dieses Vorgehen funktioniert prinzipiell auch, bspw. in main(), jedoch nicht im Objekt selbst. Da ich in C++ nicht all zu bewandert bin, steh ich nun auf dem Schlauch.. Wie kann ich bei der Instanziierung eines Objekts ein zweidimensionales Array auf dem Heap anlegen? Gruß, Michael Zitieren
Guybrush Threepwood Geschrieben 29. Juli 2009 Geschrieben 29. Juli 2009 jedoch nicht im Objekt selbst. das heißt? Zitieren
flashpixx Geschrieben 29. Juli 2009 Geschrieben 29. Juli 2009 Ein Stück Code aus meiner Template-Vektor Klasse: template <typename T> class Vector { private: T* maElements; const unsigned int mnDimension; template <typename T> Vector<T>::Vector( const unsigned int& pnDim ) : mnDimension (pnDim) { maElements = new T[mnDimension]; std::memset(maElements, 0, mnDimension*sizeof(T)); } template <typename T> Vector<T>::Vector( const Vector<T>& poVector ) : mnDimension (poVector.mnDimension) { maElements = new T[mnDimension]; std::memcpy(maElements, poVector.maElements, mnDimension*sizeof(T)); } template <typename T> Vector<T>::~Vector( void ) { if (maElements) delete[] maElements; } }; HTH Phil Zitieren
Klotzkopp Geschrieben 29. Juli 2009 Geschrieben 29. Juli 2009 Wie kann ich bei der Instanziierung eines Objekts ein zweidimensionales Array auf dem Heap anlegen?In einem Schritt gar nicht. Brauchst du aber auch nicht. Ist dir bewusst, dass es in der Standardbibliothek bereits eine vector-Klasse gibt? Warum nicht einfach ein std::vector<std::vector<T> > ? Wenn du das unbedingt selbst implementieren willst, solltest du aber keinesfalls memset und memcpy verwenden. Je nach Template-Typ geht das mächtig in die Hose. Das funktioniert nämlich nur für POD-Typen. Bei Klassen wie z.B. std::string wird dir das um die Ohren fliegen. Zitieren
flashpixx Geschrieben 29. Juli 2009 Geschrieben 29. Juli 2009 Wenn du das unbedingt selbst implementieren willst, solltest du aber keinesfalls memset und memcpy verwenden. Je nach Template-Typ geht das mächtig in die Hose. Das funktioniert nämlich nur für POD-Typen. Bei Klassen wie z.B. std::string wird dir das um die Ohren fliegen. Okay hätte ich dazu schreiben müssen. Für 3D Graphik, wo es sich hier nur um einfache numerische Datentypen handelt, kann man Memset durchaus verwenden. Ansonsten geb ich da Klotzkopp recht. Phil Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.