Veröffentlicht 15. Januar 200421 j Hallo, unser lehrer hat uns versucht zu erklären was es mit using namespace std auf sich hat. Hat aber keiner richtig verstanden. hat das was mit den >> und << von den couts und cins zu tun? Könnt ihr mir helfen?
15. Januar 200421 j Original geschrieben von b-r-e Hallo, unser lehrer hat uns versucht zu erklären was es mit using namespace std auf sich hat. Hat aber keiner richtig verstanden. hat das was mit den >> und << von den couts und cins zu tun? Könnt ihr mir helfen? "using namespace std" ist eine Direktive. Im Gueltigkeitsbereich der Datei wird der Namensbereich (namespace) mit dem Namen std zur Verfügung (using) gestellt. Man kann dies auch weglassen, dann müsste man aber überall cout durch std::cout ersetzen, weil die globale Variable cout zum Namensbereich std gehört. Mit dieser Direktvie tut man das einfach gesagtdem Compiler vorher sagen << und >> sind Ein- bzw. Ausgabeoparatoren und können bzw. müssen eben bei der Verwendung von z.B. cout und cin benutzt werden. Man kann diese auch überlagern (z.B. für eigene Klassen).
15. Januar 200421 j Naja, einleuchten tut mir das noch nicht. Dass man std immer davor schreiben müsste hat unser lehrer auch gesagt. Irgendwie will das nicht in meinen Schädel.
16. Januar 200421 j Wir arbeiten in der BF auch ohne using namespace std; aber wir müssen auch kein std:: vor alles setzten. Hängt das damit zusammen das wir die Headerdateien als <datei.h> einbinden und nicht als <datei>? mfg
16. Januar 200421 j Jepp. iostream.h ist z.B. vor dem C++ Standard entstanden und sollte nicht genutzt werden. iostream mit std:: ist die richtige wahl. (Ich verstehe nicht wieso in Schulen so oft so nen schrott gemacht wird)
16. Januar 200421 j Ja frage ich mich auch. Allerdings wollte ich letztens using namespace std; verwenden, weil mein Buch mir das auch sagt, aber Borland C++ 5 kannte den befehl gar nicht.
17. Januar 200421 j Jetzt bin ich noch mehr verwirrt. Wir machen das so # include <iostream> using namespac std; int main () { cout << "Ausgabe"; return 0; } wir haben Visual Studio
17. Januar 200421 j Ist doch auch richtig, so macht man das. Wie wir das in der Schule lernen ist es eigentlich nicht dem Standard entsprechend. Bei uns würde das so aussehen: # include <iostream.h> int main () { cout << "Ausgabe"; return 0; } mfg
17. Januar 200421 j Was macht das ".h" so ausschlaggebend? Das sind doch nur namen der Headerdateien. Ist die iostream.h nicht die gleiche wie die iostream?
17. Januar 200421 j Nein. Im Detail weiss ich es auch nicht, aber soviel: iostream.h wurde vor dem eigentlichen Standard entwickelt. Es wurde nicht im Standard aufgenommen. Eine weiterentwicklung, modifikation oder sonst wie (was) wurde dann als iostream in den Standard aufgenommen. iostream.h ist älter als iostream. Zudem liegt alles im Namensraums std , iostream.h liegt dagegen im globalen Namensraum.
19. Januar 200421 j Mal ein kleiner Versuch Namespaces zu erklären: Namespaces wurden in den ISO-Standard aufgenommen um die Namensvergabe zu vereinfachen. Sie ermöglichen z.B. Klassen, die im Grunde das selbe tun, aber unterschiedlichen Kontext haben, gleich zu benennen. Wie z.B. cin oder cout. Diese stehen in std. Es koennte aber sein, das du gleichnamige Funktionen schreibst, die z.B. ein LCD-Display bedienen. namespace lcd { void cout() { /* ... */ } // deine cout Funktion (Die Deklaration ist Schmarrn, aber hier nicht wichtig.) } void main(void) { lcd::cout(); // Das geht cout(); // würde nicht gefunden werden using namespace lcd; // Jetzt weiss der Compiler bescheid, dass er in diesem Namespace Funktionen aufrufen darf. cout(); // geht std:cout(); // Um sicher zu gehen, dass die richtige Funktion verwendet wird, kann man den Namespace nennen. }
20. Januar 200421 j Noch ein Nachtrag um den Unterschied zwischen <iostream> und <iostream.h> aufzuklaeren. Es handelt sich tatsächlich um zwei verschiedene Dateien. Warum iostream keine Endung mehr hat, weiss wohl nur die ISO Im Grunde sind beide gleich, iostream deklariert noch den namespace: iostream.h: extern istream cin; ///< Linked to standard input extern ostream cout; ///< Linked to standard output : usw... [/PHP] iostream: [PHP] namespace std { extern istream cin; ///< Linked to standard input extern ostream cout; ///< Linked to standard output : usw... }
20. Januar 200421 j Gleich sind sie nicht, im Detail gibt es unterschiede. Da ich diese aber im Detail nie herausgesucht hab bleibt das als Übung dem Anwender überlassen
20. Januar 200421 j Ja, okay. Ein bisschen was hab ich ausgelassen Stroustrup möge mir vergeben. Ich bin auch eher aus der ANSI-C Ecke.
20. Januar 200421 j Na is doch nich wild. Da die meisten Fragen hier ohnehin AnsiC sind, werden auch AnsiC Spezis gebraucht
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.