Parametersignatur



  • Ich habe eigentlich nur eine kurze Frage auf die ich bisher noch keine verständliche Antwort gefunden habe:

    Eine Parametersignatur wird ja genutzt, um anhand der Übergabeparametertypen und der Anzahl der Übergabewerte die zu nutzende überladene Funktion zu ermitteln (korrigiert mich, wenn das falsch erklärt ist!).
    Nun bekam ich die Frage gestellt warum genau der Rückgabewert der Funktion sowie die Default-Argumente nicht mit in die Parametersignatur eingehen.

    Für verständliche Antworten wäre ich sehr dankbar.

    Gruß
    Santus



  • weil der rückgabewert nicht genutzt werden muss, und die default-argumente weggelassen werden können.

    int func(int i = 28);
    double func(myclass *ptr = 0);
    // ....
    func();
    


  • So hätte ich mir die Frage auch wohl selbst beantwortet. Ich hoffe, dass es in der Klausur reicht, wenn ich das so erkläre. 😃

    Danke für die Antwort.



  • Die Signaturen unterscheiden sich ja beim Aufruf einer Funktion. Und da man beim Aufruf den Rückgabetypen nicht erkennt und die Defaultparameter ebenfalls nicht, gehören sie nicht zur Signatur.

    Beim folgenden Beispiel ist aus diesem Grund der Aufruf nicht eindeutig:

    int func(int x, float y = 0.f);
    double func(int x);
    
    func(4); // welcher Rückgabetyp?
    


  • Wäre folgende Änderung deines Codes dann auch nicht eindeutig?

    int func(int x, float y = 0.f); 
    double func(int x); 
    
    func(4,3);
    


  • Doch, diese wäre eindeutig, weil es ja nur eine Funktion mit dem Namen func und den Parametertypen int , float (also 2 Parameter) gibt. Da das zweite Argument ein Integer ist, kommt hier eine Standardkonvertierung ( int zu float ) zum Zug.



  • Supi, jetzt habe ich es. Vielen Dank!



  • Santus schrieb:

    Wäre folgende Änderung deines Codes dann auch nicht eindeutig?

    int func(int x, float y = 0.f); 
    double func(int x); 
    
    func(4,3);
    

    der kompiler würde aber höchstwarscheinlich trotzdem nen fehler melden da

    [cpp]int func(int x, float y = 0.f);
    double func(int x);

    beide mit nur einem argument aufgerufen werden können.
    besser wäre es den defaultwert ganz wegzulassen



  • seelenquell schrieb:

    der kompiler würde aber höchstwarscheinlich trotzdem nen fehler melden

    Nein, der Funktionsaufruf ist eindeutig. Probiers aus, wenn du es nicht glaubst.

    seelenquell schrieb:

    beide mit nur einem argument aufgerufen werden können.
    besser wäre es den defaultwert ganz wegzulassen

    Wie meinst du das jetzt? Die eine Funktion kann ja mit zwei Argumenten aufgerufen werden (nur die eine). Somit kommt für den folgenden Aufruf auch nur eine der beiden überladenen Funktionen in Frage:

    func(4,3);
    

    Ich vermute, du hast etwas falsch verstanden. Ein Defaultwert heisst nicht, dass man diesen Parameter nicht übergeben kann, sondern, dass wenn kein Argument übergeben wird, der Standardwert (in deinem Beispiel 0.f ) für diesen Parameter eingesetzt wird.

    int func(int x, float y = 0.f); // nehmen wir an, es gibt nur diese Funktion
    
    func(4);       // Dieser Aufruf bewirkt das Gleich wie
    func(4, 0.f);  // dieser
    

Anmelden zum Antworten