cout<< "Bitte einen String eingeben" <<endl; cin.get(str, SIZE);
for(int x = 0; x < strlen(str); x++) { stack.Push1(str[x]); //hier wird ein Char übergeben }
//Push-Methode -------------------------------------------------- bool Stack::Push1(int w) //und hier ein int entgegen genommen { if(anz < maxanz) { data[anz++] = w; } else { return (false); } } //-----------------------------------------------------------------
ist aus einem buch und funktioniert auch...nur verstehe ich nicht, dass das funktioniert, da ich ja einen char übergebe obwohl ein int erwartet wird. ps: wie mache ich die schrift hier fett?Dieser Post wurde am 19.12.2006 um 15:53 Uhr von alex309 editiert.
Der char wird implizit in einen int umgewandelt, und nimmt dabei seinen numerischen Gegenwert an. Bzw behält ihn, aber wird jetzt als solcher interpretiert. Auf den meisten gängigen Plattformen ist das der ASCII-Wert, d.h. 'A' wird zu 65 etc. Das ist das selbe wie
C++:
char c = 'A'; int x = c; // implizite Umwandlung, x == 65
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe DijkstraDieser Post wurde am 19.12.2006 um 15:55 Uhr von 0xdeadbeef editiert.
Hmm. Das geht zwar, aber C-style-casts sind in C++ eigentlich äußerst unschön, weil sie einen const_cast beinhalten - und das will man in aller Regel vermeiden. Besser wäre
C++:
char c = char(stack.Popl());
oder
C++:
char c = static_cast<char>(stack.Popl());
Ich bevorzuge die erste Schreibweise. Einen Unterschied macht das in diesem Fall nicht. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe DijkstraDieser Post wurde am 19.12.2006 um 16:13 Uhr von 0xdeadbeef editiert.