====== Default Parameter ====== Wenn eine Funktion häufig ein bestimmtes Verhalten an den Tag legen soll, welches allerdings von seinen Parametern abhängig ist, so empfiehlt sich der Einsatz von sog. //Default-Parametern//. Ein einfaches Beispiel wäre es, eine Begrüßungsnachricht zum Start des Programmes an zu geben: // Deklarationen void say_hello(const std::string& = "Hallo, werter Benutzer\n"); void say_hello(const char* ); // darf kein Default-Parameter haben, da sonst nicht mit std::string zu unterscheiden // Eine Definition double root(double radicant, int root_exponent = 2) { // Implementierung } say_hello(); // wenn kein Parameter angegeben, benutze "Hallo, werter Benutzer\n" say_hello("Guten Tag, Administrator\n"); // Alternative Nachricht der Funktion übergeben std::cout << root(9.00) << std::endl; // Gibt die Quadratwurzel von 9 aus std::cout << root(9.00, 4) << std::endl; // Gibt die 4. Wurzel von 9 aus Geben wir also explizit __keinen__ Parameter an, so wird der Default-Parameter //implizit// für den Aufruf der Funktion benutzt. Geben wir jedoch einen Parameter an, so überschreibt dieser den Defaultwert im Funktionskopf. Das kann in vielen Fällen sehr praktisch werden, besonders, wenn eine Funktion sehr viele Parameter haben sollte. ===== Reihenfolge der Funktionsparameter ===== Das Wurzel-Beispiel beinhaltet außerdem noch einen anderen, wichtigen Aspekt: die //Parameterreihenfolge//. Sobald man sich entschieden hat, einem Parameter einen Standardwert zu geben, so müssen die Nachfolger ebenfalls Default-Werte besitzen. // Code wird nicht kompilieren double root(int root_exponent = 2, double radikant) { // Implementierung } root(5.00); // kompiliert nicht, der Compiler würde versuchen, 5.00 als root_exponent zu benutzen Der Compiler kann an dieser Stelle nicht entscheiden, ob der eine Parameter nun den Defaultparameter überschreiben oder als Radikant benutzt werden soll, demnach verweigert er hier die Arbeit ganz. Es ist daher wichtig, sich die Reihenfolge der Parameter schon vorher gut zu durchdenken und die Entscheidung zu begründen. Eine allgemeine Faustregel besagt, dass die Parameter in der Reihenfolge ihrer Wichtigkeit angegeben werden sollten. Da Default-Parameter immer eine mindere Rolle spielen, stehen sie, sofern andere Parameter angegeben werden, ganz hinten in der Funktionsdeklaration, während wichtigere, wie etwa der Radikant, am Anfang angegeben werden sollten.