Bjarne Stroustrup Einführung in die Prog... Problem
-
Da passiert garnichts. Es wird lediglich die Klasse Token definiert.
Abgesehen von den zwei membern (kind und value) werden noch 2 Konstruktoren definiert, wobei du dir denjenigen mit nur einem Parameter sparen kannst, wenn du für den double-Wert (also value) einen default-Wert verwendest://... Token(char ch, double val = 0.0) :kind(ch), value(val){} //...
P.S.: achja, falls du dich fragst, was der Doppelpunkt gefolgt von kind(ch), value(val) zu bedeuten hat: das nennt sich Initialisierungsliste.
Das Stichwort sollte reichen um ausführliche Informationen dazu zu ergoogeln.
-
Ich reaktive diesen alten Thread mal, da ich zur Zeit auch mit diesem Buch arbeite/lerne.
inter2k3 schrieb:
Wozu Lösungen?
Es ist ja gerade Sinn und Zweck, dass du dich selber mit den Problemen beschäftigst und nicht nach 10 Minuten aufgibst und dir die Lösung anschaust.Grundsätzlich muss ich inter2k3 Recht geben, allerdings musste ich zwischenzeitlich feststellen, dass einige Aufgaben etwas missverständlich bzw. unpräzise formuliert sind. Hinzu kommt, dass die eine oder andere Aufgabe Wissen voraussetzt, das zum Zeitpunkt der Aufgabenstellung noch nicht bekannt ist. Ich denke da z.B. an die Aufgabe 6 auf S.153:
int get_number() /* An apology: To use cin again after a failed read, you need to use a function call "cin.clear();" to "clear" it. That isn't explained in the book until chapter 10. Sorry. Solutions that do not use this technique can get very complicated. */
Das kann einen dann schon Nerven Kosten
Auf der anderen Seite regt es ja auch die eigene Kreativität an, was rein lerntechnisch nicht das schlechteste ist.
Ich habe obiges letztlich mittels string/char und einer kleinen ASCII-Code Berechnung gelöst. Klappt wunderbar,
ist nicht so kompliziert wie oben angedeutet und basiert auf meinem derzeitigen Wissenstand.Bisher bin ich mit dem Buch sehr zufrieden - mir gefällt insbesondere wie Herr Stroustrup Wissen vermittelt.
-
Im Buch Kapitel 3.4
// Einfaches Programm zum Ausprobieren von Operationen #include "../../std_lib_facilities.h" int main() { cout << "Geben Sie einen Gleitkommawert ein: "; double n; cin >> n; cout << "n == " << n << "\nn+1 == " << n+1 << "\ndreimal n == " << 3*n << "\nzweimal n == " << n+n << "\nn zum Quadrat == " << n*n << "\nHaelfte von n == " << n/2 << "\nWurzel von n == " << sqrt(n) << endl; // ein anderer Name für Zeilenumbruch ("end of line") }
Soll das Programm ändern, dass es einen int Wert anstelle eines double Wertes einliest. Sqrt() ist nicht für int Werte definiert. Also soll ich n einer double Variablen zu weisen und daraus die Quadratwurzel ziehen.
Meine Überlegung sieht so aus.
// Einfaches Programm zum Ausprobieren von Operationen #include "../../std_lib_facilities.h" int main() { cout << "Geben Sie einen Gleitkommawert ein: "; int n; double m; cin >> n >> m; cout << "n == " << n << "\nn+1 == " << n+1 << "\ndreimal n == " << 3*n << "\nzweimal n == " << n+n << "\nn zum Quadrat == " << n*n << "\nHaelfte von n == " << n/2 << "\nWurzel von n == " << sqrt(m) << endl; // ein anderer Name für Zeilenumbruch ("end of line") }
Nun muss ich allerdings 2x die gewünschte Zahl im Programm eingeben. Gibt es da nicht auch eine andere Möglichkeit?
Bin absoluter Anfänger.
-
Ja, eben nicht 2x einlesen lassen
int n; double m; cin >> n; m = n; // bzw. besser m = static_cast<double>(n) // weiß aber nicht ob du diesen sog. 'cast' schon kennst
-
Nun hänge ich bei Aufgabe 4 Seite 115 Kapitel 3 fest.
Bekomme immer eine Fehlermeldung bei der if Anweisung.
Fehlermeldung: m was not declared in this scope
If (friend_sex = m) cout << "Mann";// Übung Serienbrief #include "../../std_lib_facilities.h" int main() { cout << "Geben Sie den Namen der Person ein, die den Brief erhalten soll:\n"; string first_name; // first_name ist eine Variable vom Typ string string friend_name; char friend_sex = 0; cin >> first_name; // liest die Zeichen in first_name ein cout << "Liebe/r " << first_name << ",\n"; cout << "Wie geht es Dir? Mir geht es gut. Ich vermisse Dich.\n"; cout << "Gib den Namen eines weiteren Freundes ein\n"; cin >> friend_name; cout << "Hast Du " << friend_name << " in letzter Zeit gesehen?\n"; cout << "Bitte gib mit 'm' oder 'w' an ob Dein Freund männlich oder weiblich ist.\n"; cin >> friend_sex; if (friend_sex = m) cout << "Mann"; if (friend_sex = w) cout << "Frau"; }
-
000ooo000 schrieb:
Nun hänge ich bei Aufgabe 4 Seite 115 Kapitel 3 fest.
Bekomme immer eine Fehlermeldung bei der if Anweisung.
Fehlermeldung: m was not declared in this scope
If (friend_sex = m) cout << "Mann";Du willst die Variable m an friend_sex zuweisen?
Vermutlich nicht. Du willst mit dem Zeichen m vergleichen.
-
if (friend_sex == 'm') ...
-
Genau das wars, vielen Dank
-
kann man anstatt diesem static cast gedöns auch schreiben m {n}; ?
-
Ja, das ist seit C++11 ein Konstruktoraufruf.
Besser ist aber static_cast, da der mehr Tipparbeit ist und einen somit daran erinnert, dass man casts vermeiden sollte.
-
Nathan schrieb:
Ja, das ist seit C++11 ein Konstruktoraufruf.
Besser ist aber static_cast, da der mehr Tipparbeit ist und einen somit daran erinnert, dass man casts vermeiden sollte.Nein, die Konstruktorsyntax mit {} funktioniert nur bei Umwandlungen, bei denen keine Informationen verloren gehen können. Das Warnzeichen "static_cast" sollte man nur dranschreiben, wenn der Cast wirklich gefährlich ist.
-
Ich hatte das immer so verstanden, dass die {} dann eben das Verlorengehen von Informationen verhindern und deshalb eine gute Alternative wären. Oder habe ich das Prinzip von static cast nicht verstanden?^^