Funktionen überladen



  • cd9000 schrieb:

    Woher soll der Compiler denn bei zwei Funktionen mit den gleichen Parametern wissen, welche er aufrufen soll?

    a.Delete("a", "b"); // welche Funktion soll aufgerufen werden?
    

    Das ist mir ja auch klar...

    Knuddlbaer schrieb:

    Nö, da wirst Du einen dritten Parameter hinzunehmen müssen damit ein
    Unterschied reinkommt.

    Ist das aber echt die einzige Lösung. Find ich nicht so optimal 🙄



  • Dann würde ich die Funktionen nicht überladen.
    Wenn die unterschiedliche Namen haben, gehts nämlich auch. 😉



  • cd9000 schrieb:

    Dann würde ich die Funktionen nicht überladen.
    Wenn die unterschiedliche Namen haben, gehts nämlich auch. 😉

    das scheint mir echt auch die beste Lösung zu sein



  • Ein anderer Ansatz wäre eine kleine Klasse zu basteln, die einen AnsiString.

    struct Titel {
       Titel (const AnsiString & name)
          : titel(name)
       {}
       AnsiString titel;
    };
    
    Und dann überlädst du
    

    Delete(const AnsiString &, const Titel &)
    [cpp]

    Ein aufruf wäre dann foo.Delete("Der und der", Titel("was weiß ich")).



  • ja wär sicher auch ne Möglichkeit. danke. Aber ich mach das ganze nun ohne überladen. Ist zwar nicht so schön, aber was solls? Den Source sieht ausser mir ja niemand 😉



  • eine andere möglichkeit wäre noch:
    lass die funktion intern quasi "raten", ob Autor oder titel gemeint ist 😉



  • davie schrieb:

    eine andere möglichkeit wäre noch:
    lass die funktion intern quasi "raten", ob Autor oder titel gemeint ist 😉

    ja, und dann natürlich mit berechnen der Wahrscheinlichkeit... Das letzte mal war's nen Titel, dann ist's diesmal eher einAutor 😃 😃



  • naja, so auch nicht.
    du hast ja irgendwo titel und autor abgespeichert, du lässt dann einfach durchlaufen, wenn du nen titel findet, der passt, wird das gelöscht, wenn ein autor gefunden wird eben der.



  • hm...
    und wenn Titel und Autor? (Interpret) den gleichen Wert haben. Dann wird's extrem schwer..



  • genau. und genau vor so einem problem steht dein compiler 🙂
    heliums idee finde ich gut, aber du könntest auch:

    class Autor_flag {} Autor;
    class Titel_flag {} Titel;
    
    void Delete(AnsiString Interpret, AnsiString Crit, Autor_flag);
    void Delete(AnsiString Interpret, AnsiString Crit, Titel_flag);
    
    //...
    Delete ("foo", "bar", Autor);
    

    es gibt aber unendlich viele möglichkeiten, das aufzulösen.
    such/denk dir das passende aus.


Anmelden zum Antworten