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 doof 😞

    Bei 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 GC

    Am besten ist es, wenn du eine Array Klasse verwendest.


Anmelden zum Antworten