Konvertierungskonstruktor - wie?
-
Hallo zusammen! Ich habe ein kleines Problem. Ich bin gerade an der Programmierung eines MastermindSpiels, welches durch eine Klasse Mastermind repräsentiert werden soll, das über ein Attribut "int * digits" verfügt. Dieses digits ist in erster Linie ein vierstelliges int-Array --> int array[4]; In dieses Array werden über die Funktion 1 + rand()%6 Zahlen zwischen 1 und 6 reingeschrieben. Diese Zahlen repräsentieren die sechs Farben in einem MastermindSpiel.
Nun lautet meine Aufgabenstellung wie folgt: "Der Konvertierungskonstruktor erzeugt ein dynamisches int-Array digits, dessen Elemente die einzelnen Ziffern der vierstelligen int-Zahl enthalten. Er übernimmt diese int-Zahl als Parameter und speichert die einzelnen Ziffern der Zahl in die Elemente von digits.Mastermind::Mastermind(int zahl) //Dies ist mein Konstruktor, aber was mache ich mit dem Parameter zahl? { digits = new int[4]; for(int i=0; i<4; i++) digits[i]=0; }
-
also wenn ich das richtig verstehe soll zahl in das array digits geschrieben werde. du initialisierst aber das array mit 0.
Du mußt also die einzelnen Stellen (Einer/Zehner...) aus zahl extrahieren, das kannst du z.B. mit modulo-rechnung machen. Diese Werte kommen dann in das aaray digits.
-
Danke erstmal. Ich habe mir das auch schon gedacht. Meine Lösung sieht wie folgt aus:
Mastermind::Mastermind(int zahl) { digits = new int[4]; digits[3]=zahl%10; digits[2]=(zahl/10) %10; digits[1]=(zahl/100) %10; digits[0]=zahl/1000; }
Leider bin ich bezüglich Programmieren in C++ noch ein relativer Anfänger. Ich würde das ganze Konstrukt lieber etwas globaler verwenden, also auch, wenn z.B. die Größe des Arrays 10 ist. Wie sähe so etwas aus?
-
Da müßtest du in einer Schleife den Modulo Operator ausführen und anschließend den Wert dann durch 10 teilen, also
{ const int nCount = 4; // oder 10 oder 4711(na ja soviele Stellen hat wohl kein int -) digits = new int[nCount]; for(int i=0; i<nCount; i++) { digits[i]=zahl%10; zahl / = 10; } }