Wie lös ich die aufgabe?



  • VitaCola schrieb:

    so nun hab ich an FUnktionsüberladung gedacht....

    sehr gut. das hat dein aufgabensteller auch gemacht.

    oder gibts da noch eine andere möglichkeit?

    ja. metaprogrammierung. aber frag am besten erst danach, wenn du es mit überladung geschafft hast.

    Weil wenn ich einer funktion was übergebe, muss ich ja vorher angeben was sie übergeben bekommt!

    ???

    nu weiß ich nicht, ob ich die 6 zeilen (ohne { und } gezählt) hinschreiben soll, dann ist aber der ganze spaß am rätseln weg.



  • so habs mal so gemacht:

    #pragma argsused
    int welcherTyp(int x)
    {
    return 1;
    }
    int welcherTyp(double x)
    {
    return 2;
    }
    int welcherTyp(string& str)
    {
    return 3;
    }
    
    int main(int argc, char* argv[])
    {
    int x=5;
    float f=1.2;
    double d=1.4;
    string str="Hallo";
    int i = welcherTyp(x);
    cout<<i<<endl;
    i = welcherTyp(f);
    cout<<i<<endl;
    i = welcherTyp(d);
    cout<<i<<endl;
    i = welcherTyp(str);
    cout<<i<<endl;
    getch();
    
            return 0;
    }
    

    hab jetzt nich auf formatierung geachtet, und auch keine kommentare,. ihr versteht das ja sicherlich!



  • @volkard:

    Ich denke

    1. Mit Fkt überladung

    2. mit Templates??? müsste auch gehen

    3. Für freaks mit exections. den im parameter übergebenen wert schmeisst ne exeption
    und du checks mit 3 catches.

    catch ( int x )
    return 0 oder cout <<
    catch ( long l )

    und



  • vitacola: Ich nehme an, dass es auch so gemeint war. Und der templatisierte Ansatz ist hier ziemlicher overkill. Wenns dich interessiert, das sähe etwa so aus:

    template<typename> struct typ_nummer { static int const val = 0; }
    template<> int const typ_nummer<int>::val = 1;
    template<> int const typ_nummer<double>::val = 2;
    template<> int const typ_nummer<std::string>::val = 3;
    
    template<typename t> int welcherTyp(t const &) { return typ_nummer<t>::val; }
    


  • hmm....dazu muss ich mich wohl erstmal bis zum thema der templates vorarbeiten was? 🙂



  • VitaCola schrieb:

    so habs mal so gemacht:

    #pragma argsused
    int welcherTyp(int x)
    {
    return 1;
    }
    int welcherTyp(double x)
    {
    return 2;
    }
    int welcherTyp(string& str)
    {
    return 3;
    }
    

    Lass das '#pragma argsused' weg. #pragma's sind compiler-spezifisch und daher nicht immer funktionell. Wenn du einen Parameter nicht brauchst, dann lass den Namen weg, um Warnungen zu unterbinden, zB

    int welcherTyp(int)
    {
        return 1;
    }
    


  • Wer sagt, dass man das nicht über temlplates und rtti machen soll? 😃
    Aber mal echt jetzt, hier sind überladungen ja wohl das einzig sinnvlolle...



  • newkid_ schrieb:

    3. Für freaks mit exections. den im parameter übergebenen wert schmeisst ne exeption
    und du checks mit 3 catches.

    catch ( int x )
    return 0 oder cout <<
    catch ( long l )

    Bloß nicht! exception heißt Ausnahme!



  • ???

    explodiert der computer?
    du fängst ja die ausnahmen ab und kontrollierst so den programmablauf, also wo liegt die explosion?

    ausserdem sagte ich ja "für freakz"



  • lol wenn ich auch mal was sagen darf...keine ahnung obs stimmt, ABER
    das
    #pragma argsuseed

    hat sicher nich vita geschrieben, das steht nämlich beim borland immer drinne 😉



  • newkid_ schrieb:

    ???

    explodiert der computer?
    du fängst ja die ausnahmen ab und kontrollierst so den programmablauf, also wo liegt die explosion?

    ausserdem sagte ich ja "für freakz"

    Für Idioten vielleicht. Wieso zur Hölle willst du für den normalen vorgesehenen Programmfluß Exceptions benutzen?



  • Michael E. schrieb:

    Für Idioten vielleicht. Wieso zur Hölle willst du für den normalen vorgesehenen Programmfluß Exceptions benutzen? Und warum quoted volkard so einen Mist?

    ich fand die exception-lösung sehenswert und interessant.

    ich finde es gut, wenn auch abwegige programmiertricks gezeigt werden. am besten natrlich unter dem vorbehalt, daß das nicht in produktionscode verwendung finden sollte. und es war ja ordentlich mit warnhinweis versehen.



  • Für mich hats sich eher so angehört, als ob "richtige Profis" das verwenden würden, die ordentlich was drauf haben.



  • "Richtige Profis" benutzen ja auch Exceptions 😉
    Eigentlich zwar nicht für sowas, aber obfuscated Code ruled eben!


Anmelden zum Antworten