Schwierigkeiten mit Klasse und dynamischen Array

Meiki Jay

Mitglied
Hallo, ich bin relativ neu beim Programmieren in c++. Deshalb hänge ich gerade....

Ich sollte eine Klasse schreiben mit dynamischen Array. Das Array soll 20 Elemente haben, sobald es voll ist sollen neue 20 elementer erzeugt werden, aber als nächsten Listen element angehängt werden, also es soll eine Liste entstehen, in welcher jedes Element ein Array mit 20 Elementen enthält.

Ich weiss nicht wie ich das mit der Liste hinbekommen soll...
also bisher habe ich nur das:

C++:
using namespace std;
#include<iostream>

class DynArray {
	
private:
	
	int *arr;

public:

	DynArray () {
		arr = new int [20];
	}
	
	~DynArray() {
		delete[] arr;
	}
	
	int operator[](int str) { 
		return arr[str]; 
	}; 
	
	int operator= (int x) {
		return arr[21] = x;
	}
	
	friend ostream& operator<< (ostream& o, DynArray const& x);
};

ostream& operator<< (ostream& o, DynArray const& x) {
	o << x.arr;
}

Und was ich auch noch nicht hin bekomme ist:
ich weiss nicht wie ich es schaffe wenn ich im main Teil z.B:
a[21] = 5;
eingeben kann und das dann an Stelle 21 gespeichert wird.
ich bekomme es nur so hin, dass ich in main z.B eingebe:
a = 5;
und dann in der Klasse so mache, dass er das immer dem 21. Feld zuweist.

Ich hoffe ihr könnt mir helfen,
Danke schonmal im voraus für die Antworten,
Meiki
 
Zuletzt bearbeitet von einem Moderator:
Ein aussagekräftigerer Titel wäre nett, wenn du keine probleme mit einem C++ Programm hättest würdest du hier nicht posten.

Und benutze für Code bitte dir CPP Tags.

So genug gemeckert :p zu deinem Problem:
Wenn du ein dynamisches Array erzeugen sollst, dann musst du erst mal sagen welchen Typs, du benutzt int. Und wenn es eine Liste werden soll, dann ist es Sinvoll, einen Struct zu machen, der aus einem int und einem Zeiger vom Typ deines Structs besteht.
Dann erzeugst du einen Zeiger auf deinen Structtyp, und forderst dann mit malloc (glaube ich zumindest, bin nicht ganz sicher) die gewünschte menge an, und der Zeiger des Structs auf den nächsten Teil der Liste.
Aber das wäre dann eben eine Liste und kein Array. Ein Array würde dynamisch in dem du einen Int-Zeiger nimmst und dann mit malloc 20*sizeof(int) anforderst.
Wenn du das erweitern willst, muss du es erst kopieren, dann ein neues mit 40 anfordern und das gesicherte wieder reinkopieren.

C++ bietet übrigens schon dynamische Arrays, heißen Vectoren.
 
ich darf sowas wie malloc nicht verwenden und ich muss das mit dynamischen Array lösen.
In der originalen Aufgabenstellung steht, die Liste ist dazu da, damit man das Array nicht immer kopieren muss, sondern die neuen 20 Elemente einfach anhängen kann.

Und das Problem mit dem Zuweisungsoperator könnte ich dann immer noch nicht lösen...

Und noch eine Frage, wei mache ich das mit den CPP tags?

Danke,
Meiki
 
Hallo, wie bereits gesagt wurde brauchst du eine Liste als Datentyp. Entweder so wie es Ryu sagt selber anlegen allerdings nicht mit malloc (das ist C) sondern mit new. Die andere Möglichkeit wurde auch schon genannt, C++ bietet schon eine dynamische Liste an. In C++ ist ein dynamisches Array übrigens die Klasse Vector allerdings nicht auf 20 Stück begrenzt.
Ich würde wohl eine Klasse schreiben die als Member eine Liste mit Arrays führt, jeweils 20 Plätze und einen Counter und dann kann man ja in der Einfüge-Operation überprüfen ob ein neues array angelegt werden soll und es dann ist die liste einfügen.
Die Liste ist von C++ mit #include <list> vorgegeben.

mfg:p
 
Und wie mach ich das mit der Class die eine Liste mit Arrays führt?

Ich weiss überhaupt nicht wie das mit den Listen geht. Kann hier jemand vielleicht ein Beispiel für eine Liste posten?
 
Du hast unter deinem Beitrag einen Button, der heißt ändern, benutz den bitte, und erstelle keine 2 Posts hintereinander.

Wenn du ein Beispiel für Listen willst solltest du mal hier gucken.
Da ist jede Methode der List-Klasse aufgeführt, und mit einem kleinen Beispiel erklärt.
 
Hallo, ich hab es bis heute wieter versucht, aber ich krieg das einfach nicht hin. Ich krieg den Zuweisungsoperator einfach nicht hin...
ich müsste in main schrieben können
z.b.: a[3] = 5;
wenn ich das bei meinem schreibe bekomme ich den Fehler:
"Invalid Ivalue assignment" und ich weiss nicht was ich anders machen muss, damit das funktioniert..


C++:
using namespace std;
#include<iostream>
#include<list>

class DynArray {
	
public:
	
	int *arr;
	int wert;
	
	DynArray () {
		arr = new int [20];
	}

	int operator[](int str) {
		wert = str;
		return arr[str]; 
	}
	
	int operator= (int x) {
		return arr[wert] = x;
	}
	
	friend ostream& operator<< (ostream& o, DynArray const& x);
};

ostream& operator<< (ostream& o, DynArray const& x) {
	o << x.arr;
};

Wie muss ich da den Zuqweisungoperator umschreiben, oder muss ich noch mehr ändern?

Und was ich auch nicht vertsehe wie ich das in ein Liste einbauen kann. Ich weiss zwar wie man eine Liste erzeugt, aber wie kriege ich das hin, dass ich wenn die 20 Array Elemente voll sind ein neues Listenelement angefügt wird, mit wieder 20 Arrayelementen?

Danke für eure Hilfe,
Meiki
 

Neue Beiträge

Zurück