76 Godzina 5
Definicja funkcji musi być zgodna, co do wartości zwracanej, nazwy i listy parametrów, z definicją. Funkcje można przeciążać zmieniając liczbę i typ parametrów; kompilator przy wywołaniu automatycznie dobierze właściwą na podstawie argumentów.
Zmienne lokalne i parametry są widoczne tylko wewnątrz bloku, w którym zostały zadeklarowane. Parametry przekazywane przez wartość to kopie. Ich zmiana nie powoduje zmiany oryginałów w funkcji wywołującej.
P: Dlaczego nie wykorzystywać tylko zmiennych globalnych?
O: Kiedyś tylko tak pisano programy. Jednak z biegiem czasu, kiedy programy stały się dużo większe, zmienne globalne stały się bardzo niewygodne w użyciu. Trudno było odnajdywać błędy w programach i je poprawiać. Głównym powodem tego był fakt, iż każda zmienna mogła być zmieniona przez dowolną funkcję, gdziekolwiek w programie. Lata doświadczeń przekonały programistów, że dane powinny być przechowywane lokalnie i dostęp do nich powinien być ściśle określony.
P: Dlaczego zmiana wartości argumentów funkcji nie wpływa na wartości w funkcji wywołującej?
O: Argumenty są przekazywane do funkcji przez wartość. Oznacza to, że argument w funkcji stanowi jedynie kopię wartości oryginalnej.
P: Co się stanie gdy zadeklaruję i zdefiniuję następujące funkcje?
int Pole(int szerokość, int dlugosc = 1); int Pole(int rozmiar);
Czy to jest przeciążenie? Funkcje różnią się liczbą parametrów, ale w pierwszej określiłem wartość domyślną.
O: Taka deklaracja zostanie skompilowana. Jednak w momencie użycia funkcji Pole () z jednym parametrem spowoduje błąd kompilacji świadczący o nieścisłości. Kompilator nie wie, którą funkcję ma wywołać.
Definicja funkcji musi być zgodna, co do wartości zwracanej, nazwy i listy parametrów, z definicją. Funkcje można przeciążać zmieniając liczbę i typ parametrów; kompilator przy wywołaniu automatycznie dobierze właściwą na podstawie argumentów.
Zmienne lokalne i parametry są widoczne tylko wewnątrz bloku, w którym zostały zadeklarowane. Parametry przekazywane przez wartość to kopie. Ich zmiana nie powoduje zmiany oryginałów w funkcji wywołującej.
P: Dlaczego nie wykorzystywać tylko zmiennych globalnych?
O: Kiedyś tylko tak pisano programy. Jednak z biegiem czasu, kiedy programy stały się dużo większe, zmienne globalne stały się bardzo niewygodne w użyciu. Trudno było odnajdywać błędy w programach i je poprawiać. Głównym powodem tego był fakt, iż każda zmienna mogła być zmieniona przez dowolną funkcję, gdziekolwiek w programie. Lata doświadczeń przekonały programistów, że dane powinny być przechowywane lokalnie i dostęp do nich powinien być ściśle określony.
P: Dlaczego zmiana wartości argumentów funkcji nie wpływa na wartości w funkcji wywołującej?
O: Argumenty są przekazywane do funkcji przez wartość. Oznacza to, że argument w funkcji stanowi jedynie kopię wartości oryginalnej.
P: Co się stanie gdy zadeklaruję i zdefiniuję następujące funkcje?
int Pole(int szerokość, int dlugosc = 1); int Pole(int rozmiar);
Czy to jest przeciążenie? Funkcje różnią się liczbą parametrów, ale w pierwszej określiłem wartość domyślną.
O: Taka deklaracja zostanie skompilowana. Jednak w momencie użycia funkcji Pole () z jednym parametrem spowoduje błąd kompilacji świadczący o nieścisłości. Kompilator nie wie, którą funkcję ma wywołać.