Funkcje 69
Do każdego zadeklarowanego w prototypie i definicji funkcji parametru, funkcja wywołująca musi pobrać wartość zgodną z zadeklarowanym typem. Jeśli masz funkcję zadeklarowaną w następujący sposób:
long mojaFunkcja(int);
to musisz przekazywać do niej wartość całkowitą. Jeśli definicja jest niezgodna z prototypem, lub jeśli wartość przekazywana nie będzie całkowita to kompilator zasygnalizuje błąd.
Od tej reguły jest jeden wyjątek. Jeśli w prototypie zadeklarujemy domyślną wartość dla parametru, to gdy nie określimy danego argumentu, zostanie mu przypisana automatycznie wartość domyślna. Odpowiednia deklaracja powinna wyglądać następująco:
long mojaFunkcja(int x = 50);
Definicja funkcji nie zmienia się. Nagłówek definicji nadal będzie miał postać: long mojaFunkcja (int x) // nie ma średnika!
Teraz, gdy wywołamy funkcję bez określenia wartości argumentu to kompilator automatycznie nada mu wartość 50. Nazwa parametru z wartością domyślną nie musi być taka sama jak w nagłówku definicji, wartość domyślna jest przypisywana na podstawie pozycji w liście parametrów, a nie według nazwy.
Wartości domyślne można nadawać kilku parametrom funkcji. Jest tu jednak pewne ograniczenie, jeśli parametr nie ma określonej wartości domyślnej, to żaden z poprzedzających go parametrów, również nie może posiadać wartości domyślnej.
Jeśli prototyp funkcji wygląda tak:
long mojaFunkcja (int Parami, int Param2, int Param3);
to parametrowi Param2 możesz przypisać wartość domyślną wtedy i tylko wtedy gdy przypiszesz wartość domyślną do Param3. Podobnie, gdy chcesz przypisać wartość domyślną do Parami to musisz uwzględnić parametry Param2 i Param3 i również nadać im wartości domyślne. Przykład programu wykorzystujący wartości domyślne prezentujemy poniżej.
Listing 5.5. Domyślne wartości parametrów.
1: // Listing 5.5 - demonstracja ubycia
2: // wartoceci domyoelnych dla parametrów
3:
4: #include <iostream.h>
5:
6: int ObjetoscKostki(int dlugosc, int szerokość = 25, int wysokosc =
Do każdego zadeklarowanego w prototypie i definicji funkcji parametru, funkcja wywołująca musi pobrać wartość zgodną z zadeklarowanym typem. Jeśli masz funkcję zadeklarowaną w następujący sposób:
long mojaFunkcja(int);
to musisz przekazywać do niej wartość całkowitą. Jeśli definicja jest niezgodna z prototypem, lub jeśli wartość przekazywana nie będzie całkowita to kompilator zasygnalizuje błąd.
Od tej reguły jest jeden wyjątek. Jeśli w prototypie zadeklarujemy domyślną wartość dla parametru, to gdy nie określimy danego argumentu, zostanie mu przypisana automatycznie wartość domyślna. Odpowiednia deklaracja powinna wyglądać następująco:
long mojaFunkcja(int x = 50);
Definicja funkcji nie zmienia się. Nagłówek definicji nadal będzie miał postać: long mojaFunkcja(int x) // nie ma średnika!
Teraz, gdy wywołamy funkcję bez określenia wartości argumentu to kompilator automatycznie nada mu wartość 50. Nazwa parametru z wartością domyślną nie musi być taka sama jak w nagłówku definicji, wartość domyślna jest przypisywana na podstawie pozycji w liście parametrów, a nie według nazwy.
Wartości domyślne można nadawać kilku parametrom funkcji. Jest tu jednak pewne ograniczenie, jeśli parametr nie ma określonej wartości domyślnej, to żaden z poprzedzających go parametrów, również nie może posiadać wartości domyślnej.
Jeśli prototyp funkcji wygląda tak:
long mojaFunkcja (int Parami, int Param2, int Param3);
to parametrowi Param2 możesz przypisać wartość domyślną wtedy i tylko wtedy gdy przypiszesz wartość domyślną do Param3. Podobnie, gdy chcesz przypisać wartość domyślną do Parami to musisz uwzględnić parametry Param2 i Param3 i również nadać im wartości domyślne. Przykład programu wykorzystujący wartości domyślne prezentujemy poniżej.
Listing 5.5. Domyślne wartości parametrów.
1: // Listing 5.5 - demonstracja ubycia
2: // wartooeci domycelnych dla parametrów
3:
4: (tinclude <iostream.h>
5:
6: int ObjetoscKostki(int dlugosc, int szerokość = 25, int wysokosc =
~D;
7: