Überschreiben von Klassen



  • Hi,

    Wieso kann ich, wenn ich über der main() - Funktion meine eigene String-Klasse mit "class String..." deklariere, die Standard-String-Klasse damit überschreiben? Wenn ich nun die String Klasse in der main()-Funktion verwende, wird meine eigene String-Klasse verwendet und nicht die Standard-String-Klasse. Warum? Woran liegt das?

    lg



  • Ok, das hat daran gelegen, dass ich nicht

    #include <string>
    

    verwendet habe.


  • Mod

    Weil die Standardstringklasse std::string heißt und nicht string. Daher darfst du in anderen Namespaces (z.B. dem globalen) auch eine Klasse string haben. Und wenn du dann wird bei einem einfachen string foo; eben diese genommen, sofern du nicht ausdrücklich sagst, dass du std::string haben möchtest.

    edit: Das ändert sich natürlich, wenn du std::string mit einem using ebenfalls im globalen Namensraum verfügbar machst. Siehe CStolls Beitrag unter meinem.



  • Erstens heißt die Standard-Stringklasse std::string (mit kleinem s und im Namensraum std), zweitens funktioniert das vermutlich nur, solange du den Header <string> nicht in die Nähe deines Codes lässt - andernfalls passiert so etwas.



  • Und versuche niemals etwas dem Namensbereich std hinzuzufügen (ausser eine komplette Template-Spezialisierung).


Anmelden zum Antworten