Arraylänge über Konstruktor übergeben - wie setze ich das in C++ um?
-
Hallo,
ich bin vor kurzem von Java auf C++ umgestiegen und weiss nicht genau wie ich das umsetzen soll.
Ich habe eine Klasse in der ein privates Int Array liegen soll. Die Länge soll im Konstruktor übergeben werden. In Java weiß ich wie ich es machen würde, da kann ich getrennt die Variable deklarieren:
class Arraykram{ private: int[][] array1; public: Arraykram(int arraylaenge); }
Und im Konstruktur würd ich dann eben einfach folgendes verwenden:
array1 = new int[arraylaenge][arraylaenge]
Geht das auch in C++? Wenn ja wie?
Vielen Dank!
Gruß
Oberon
-
Man sollte in C++ solche Konstrukte meiden.
zwei Loesungen gibt es aber dafuer:
int* p=new int[laenge*laenge]; //oder int** p=new int*[laenge]; for(int i=0;i<laenge;++i) p[i]=new int[laenge];
Beide Varianten sind unschoen.
Deshalb wuerde ich eine Array Klasse vorschlagen.
zB std::vector wenn du es dynamisch willst, oder eine eigene (zB die von boost) fuer statische Arrays.
-
Vielen Dank!
Inwiefern ist es "unschön"? Ist es gefährlich oder einfach nur nicht so toller Stil?
Gruß
Oberon
-
Oberon schrieb:
Inwiefern ist es "unschön"? Ist es gefährlich oder einfach nur nicht so toller Stil?
Du machst recht schnell einen Fehler rein.
Bei
int* p=new int[length*length];musst du auf p[1][1] dann so zugeifen:
p[1+1*length]
das ist natuerlich irrsinnig doofBei dem
int** musst du darauf achten wieder alles zu löschen - bzw. darauf achten, dass du mögliche exceptions beim konstruiieren abfängst - C++ hat ja keinen GCAm besten ist es, wenn du eine Array Klasse verwendest.