Zum Inhalt springen

[C++] Dynamisches (2D) Array bei Instanziierung eines Objekts


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben
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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...