Datentyp als Vorraussetzung



  • Das verstehe ich jetzt nicht ganz es gibt doch Typumwandlung also wieso sagst du dass x immer std::string bleibt?



  • Dkpingi schrieb:

    Das verstehe ich jetzt nicht ganz es gibt doch Typumwandlung also wieso sagst du dass x immer std::string bleibt?

    Wie soll diese Typumwandlung denn aussehen?



  • Die Fragestellung ist immernoch unklar! Zeig uns doch einfach mal was Du machen willst...

    Was die netten Menschen in diesem Thread Dir versuchen zu sagen:

    void funktion(std::string xxx)
    {
        // xxx IST und WIRD IMMER string bleiben.
        // es sei denn __DU__ wandelst es in irgendwas anderes um
        // aber dann weisst __DU__ doch wohl auch, welchen Typ "irgendwas anderes" hat, oder?
    }
    


  • Dkpingi schrieb:

    ...wenn ich meiner Klasse einen string übergebe ... muss ich erstmal feststellen ob das ein string ist....

    Da hast DU einen Knoten im Denken: Wenn es ein string ist, brauchst Du das nicht mehr zu prüfen (und "alles" ist ein String 😉 ).

    Du willst wahrscheinlich feststellen, ob man aus diesem String eine Ganzzahl (z.B.) extrahieren kann - und dafür sind die stream-Operatoren << und >> da.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Dkpingi schrieb:

    ...wenn ich meiner Klasse einen string übergebe ... muss ich erstmal feststellen ob das ein string ist....

    Da hast DU einen Knoten im Denken: Wenn es ein string ist, brauchst Du das nicht mehr zu prüfen (und "alles" ist ein String 😉 ).

    Du willst wahrscheinlich feststellen, ob man aus diesem String eine Ganzzahl (z.B.) extrahieren kann - und dafür sind die stream-Operatoren << und >> da.

    Gruß,

    Simon2.

    Stimmt ich habe grad einen Denkfehler.Das mit dem extrahieren der Ganzzahl klingt nach dem was ich wollte allerdings steht in meinem Lehrbuch irgendetwas von

    string str="123";
    int intzahl;
    intzahl=atoi(str.c_str());
    

    das wollte ich tun sobald ich festgestellt habe ob man nun Ganzzahlen extrahieren kann oder nicht.



  • Dkpingi schrieb:

    ...

    Sowas macht man besser mit std::stringstream

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <limits>
    
    std::string str = "20";
    
    std::stringstream strstr;
    strstr << str;
    
    int zahl;
    if(!(strstr >> zahl))
    {
        std::cerr << "Fehler: " << str << " ist keine int.\n";
    }
    


  • Ja ich denke das trifft es.
    Vielen Dank an alle.



  • Simon2 schrieb:

    Dkpingi schrieb:

    ...wenn ich meiner Klasse einen string übergebe ... muss ich erstmal feststellen ob das ein string ist....

    Da hast DU einen Knoten im Denken: Wenn es ein string ist, brauchst Du das nicht mehr zu prüfen (und "alles" ist ein String 😉 ).

    Aber was wenn ich mal einen string mal einen vector und mal was anderes übergebe?



  • c++ fan 2008 schrieb:

    Aber was wenn ich mal einen string mal einen vector und mal was anderes übergebe?

    Wenn der Parameter vom Typ std::string ist, dann kannst Du keinen std::vector übergeben.



  • Die Klasse war für eine Übungsaufgabe zum Thema oop.
    Dort stand nur,dass man string und int Werte übergeben können muss.



  • Dkpingi schrieb:

    Die Klasse war für eine Übungsaufgabe zum Thema oop.
    Dort stand nur,dass man string und int Werte übergeben können muss.

    Dann war vielleicht Überladung gemeint:

    class MyClass
    {
       MyClass(int param); //wird bei MyClass mc(0) aufgerufen
       MyClass(const std::string& param); //wird bei MyClass mc("0") aufgerufen
    };
    

    Als konkretes Beispiel könnte z.B. eine Klasse für Uhrzeiten dienen, bei der man einmal eine Uhrzeit-Objekt über h, m und s als Integer anlegen kann:
    ClockTime ct(14, 30, 13)
    und einmal z.B. über einen String:
    ClockTime ct("14:30:13")

    Mit nur einem Konstruktor geht das aber nicht. Man muss einen für die Integers haben, und einen anderen für die Strings.



  • Danke für den Tipp die Klasse ist tatsächlich für Uhrzeiten 😉 .


Anmelden zum Antworten