Transcript Przekazywanie argumentów przez wartość
Slide 1
Przekazywanie argumentów
&i
Slide 2
Przekazywanie argumentów przez wartość
Najpopularniejszą metodą budowania funkcji
jest przekazywanie argumentów przez wartość.
#include
Funkcja musi zawierać argumenty wraz z ich
#include
typami oddzielone przecinkami.
using namespace std;
Kiedy przekazujemy do funkcji jakąś zmienną,
zostaje utworzona w pamięci jej kopia.
int zwieksz (int liczba)
Wszystko co dzieje się wewnątrz funkcji
{
odbywa się tak na prawdę na kopii zmiennej
// zmienna 'liczba' jest kopią zmiennej 'dlugosc'
przekazanej w argumencie poprzez wartość.
liczba = liczba * 2;
return liczba;
}
int main()
{
int dlugosc = 125;
cout << dlugosc << endl;
// przypisujemy nową wartość dla zmiennej
dlugosc = zwieksz(dlugosc);
cout << dlugosc << endl;
system("pause >nul");
return 0;
}
W takim wypadku konieczne staje się
zwrócenie odpowiedniej wartości za pomocą
return i przypisanie zwróconej wartości do
odpowiednich zmiennych.
Jeżeli funkcja nie zwróci żadnej wartości,
wtedy jej wywołanie może stać się bezcelowe.
Utworzona kopia zmiennej, nawet jeżeli
zostanie zmodyfikowana, zostanie usunięta z
pamięci po zakończeniu funkcji.
Slide 3
Przekazywanie argumentów przez referencję
#include
#include
using namespace std;
void zmien(int &liczba)
{
// modyfikując referencję modyfikujemy też
//zmienną oryginalną
liczba = 123456;
}
int main()
{
int test = 0;
cout << test << endl;
// wywołanie funkcji (referencja zmiennej 'test')
zmien(test);
// wyświetlenie nowej wartości
cout << test << endl;
system("pause >nul");
return 0;
}
W funkcji tworzymy dowolną ilość
argumentów wraz z typami.
Nazwy argumentów poprzedzone są
ampersandem (&). Zmienne wewnątrz
funkcji nie są kopią, oznacza to że
operując na zmiennych referencyjnych
operujemy także na zmiennej oryginalnej
z pod której wywołana została funkcja
Przekazując argumenty przez wartość,
funkcja może zwrócić tylko jeden parametr
za pomocą return. Oznacza to, że możliwe
jest zmodyfikowanie wartości tylko jednej
zmiennej lokalnej występującej poza
wywoływaną funkcją (tak jak w przykładzie
na poprzednim slajdzie).
W przekazywaniu wartości przez
referencję, podczas wywołania jednej funkcji
możemy zmienić kilka zmiennych.
Slide 4
#include
Przykład
using namespace std;
void Zamiana1(int a, int b)
{
// przez wartość
int x;
x = a; a = b; b = x;
}
void Zamiana2(int &a, int &b)
{
// przez referencję
int x;
x = a; a = b; b = x;
}
main()
{
int x = 12;
int y = 35;
cout << " x : y\n"
"-------\n"
<< x << " : " << y << endl;
Zamiana1(x,y);
cout << x << " : " << y << endl;
Zamiana2(x,y);
cout << x << " : " << y << endl << endl;
system("pause");
}
W programie zdefiniowano dwie funkcje Zamiana1 i
Zamiana2.
Różnią się one jedynie tym, iż argumenty funkcji
Zamiana1 są przekazywane poprzez wartość,
a argumenty funkcji Zamiana2 przekazywane są
poprzez referencję.
Obie funkcję zamieniają ze sobą zawartości
argumentów a i b. Z wyniku działania programu
widać wyraźnie, iż zamiana argumentów w funkcji
Zamiana1 nie wpływa na zmienne x i y funkcji main.
Pozostają one bez zmian. Zatem możemy wyciągnąć
wniosek, iż funkcja Zamiana1 działała jedynie na
kopiach zmiennych x i y przekazanych poprzez stos.
W przypadku funkcji Zamiana2 nastąpiła faktyczna
zamiana zmiennych x i y.
Wnioskujemy zatem, iż funkcja Zamiana2
otrzymawszy adresy argumentów uzyskała dostęp
do zmiennych x i y funkcji main.
Slide 5
Parametrami formalnymi nazywamy argumenty, które pojawiają się w nagłówku
deklarowanej (również definiowanej) funkcji. Lista tych parametrów zawiera nazwy i typy
argumentów, na przykład:
void funkcja (int a, double b);
Parametry aktualne to argumenty podawane podczas uruchamiania funkcji.
Przypisywane są one parametrom formalnym zgodnie z kolejnością na liście. Należy
pamiętać o zachowaniu zgodności typów i liczby parametrów, na przykład:
int x=2;
funkcja (x, 5.3);
Jeśli w miejscu parametrów formalnych wpiszemy słowo kluczowe void, to funkcja nie
będzie posiadała parametrów.
Przekazywanie parametrów przez wartość stosowane jest przede wszystkim wówczas,
gdy chcemy, aby wartość parametrów aktualnych była zmieniana wewnątrz funkcji, lub gdy
w miejsce parametrów chcemy wstawić wartości liczbowe.
Przekazywanie parametrów przez referencję jest stosowane w sytuacji, gdy chcemy,
aby zmiany dokonywane na parametrach wewnątrz funkcji były przekazywane również na
zewnątrz. Chcemy aby zmieniana była wartość parametru aktualnego.
Slide 6
Przekazywanie argumentów przez wskaźnik
Ale o tym później ;-)
Slide 7
Zapoznaj się z materiałem na podanej niżej stronie i wykonaj
zadanie domowe (na końcu strony)
http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Przekazywanieargumentow-funkcji-przez-referencje/356
Przekazywanie argumentów
&i
Slide 2
Przekazywanie argumentów przez wartość
Najpopularniejszą metodą budowania funkcji
jest przekazywanie argumentów przez wartość.
#include
Funkcja musi zawierać argumenty wraz z ich
#include
typami oddzielone przecinkami.
using namespace std;
Kiedy przekazujemy do funkcji jakąś zmienną,
zostaje utworzona w pamięci jej kopia.
int zwieksz (int liczba)
Wszystko co dzieje się wewnątrz funkcji
{
odbywa się tak na prawdę na kopii zmiennej
// zmienna 'liczba' jest kopią zmiennej 'dlugosc'
przekazanej w argumencie poprzez wartość.
liczba = liczba * 2;
return liczba;
}
int main()
{
int dlugosc = 125;
cout << dlugosc << endl;
// przypisujemy nową wartość dla zmiennej
dlugosc = zwieksz(dlugosc);
cout << dlugosc << endl;
system("pause >nul");
return 0;
}
W takim wypadku konieczne staje się
zwrócenie odpowiedniej wartości za pomocą
return i przypisanie zwróconej wartości do
odpowiednich zmiennych.
Jeżeli funkcja nie zwróci żadnej wartości,
wtedy jej wywołanie może stać się bezcelowe.
Utworzona kopia zmiennej, nawet jeżeli
zostanie zmodyfikowana, zostanie usunięta z
pamięci po zakończeniu funkcji.
Slide 3
Przekazywanie argumentów przez referencję
#include
#include
using namespace std;
void zmien(int &liczba)
{
// modyfikując referencję modyfikujemy też
//zmienną oryginalną
liczba = 123456;
}
int main()
{
int test = 0;
cout << test << endl;
// wywołanie funkcji (referencja zmiennej 'test')
zmien(test);
// wyświetlenie nowej wartości
cout << test << endl;
system("pause >nul");
return 0;
}
W funkcji tworzymy dowolną ilość
argumentów wraz z typami.
Nazwy argumentów poprzedzone są
ampersandem (&). Zmienne wewnątrz
funkcji nie są kopią, oznacza to że
operując na zmiennych referencyjnych
operujemy także na zmiennej oryginalnej
z pod której wywołana została funkcja
Przekazując argumenty przez wartość,
funkcja może zwrócić tylko jeden parametr
za pomocą return. Oznacza to, że możliwe
jest zmodyfikowanie wartości tylko jednej
zmiennej lokalnej występującej poza
wywoływaną funkcją (tak jak w przykładzie
na poprzednim slajdzie).
W przekazywaniu wartości przez
referencję, podczas wywołania jednej funkcji
możemy zmienić kilka zmiennych.
Slide 4
#include
Przykład
using namespace std;
void Zamiana1(int a, int b)
{
// przez wartość
int x;
x = a; a = b; b = x;
}
void Zamiana2(int &a, int &b)
{
// przez referencję
int x;
x = a; a = b; b = x;
}
main()
{
int x = 12;
int y = 35;
cout << " x : y\n"
"-------\n"
<< x << " : " << y << endl;
Zamiana1(x,y);
cout << x << " : " << y << endl;
Zamiana2(x,y);
cout << x << " : " << y << endl << endl;
system("pause");
}
W programie zdefiniowano dwie funkcje Zamiana1 i
Zamiana2.
Różnią się one jedynie tym, iż argumenty funkcji
Zamiana1 są przekazywane poprzez wartość,
a argumenty funkcji Zamiana2 przekazywane są
poprzez referencję.
Obie funkcję zamieniają ze sobą zawartości
argumentów a i b. Z wyniku działania programu
widać wyraźnie, iż zamiana argumentów w funkcji
Zamiana1 nie wpływa na zmienne x i y funkcji main.
Pozostają one bez zmian. Zatem możemy wyciągnąć
wniosek, iż funkcja Zamiana1 działała jedynie na
kopiach zmiennych x i y przekazanych poprzez stos.
W przypadku funkcji Zamiana2 nastąpiła faktyczna
zamiana zmiennych x i y.
Wnioskujemy zatem, iż funkcja Zamiana2
otrzymawszy adresy argumentów uzyskała dostęp
do zmiennych x i y funkcji main.
Slide 5
Parametrami formalnymi nazywamy argumenty, które pojawiają się w nagłówku
deklarowanej (również definiowanej) funkcji. Lista tych parametrów zawiera nazwy i typy
argumentów, na przykład:
void funkcja (int a, double b);
Parametry aktualne to argumenty podawane podczas uruchamiania funkcji.
Przypisywane są one parametrom formalnym zgodnie z kolejnością na liście. Należy
pamiętać o zachowaniu zgodności typów i liczby parametrów, na przykład:
int x=2;
funkcja (x, 5.3);
Jeśli w miejscu parametrów formalnych wpiszemy słowo kluczowe void, to funkcja nie
będzie posiadała parametrów.
Przekazywanie parametrów przez wartość stosowane jest przede wszystkim wówczas,
gdy chcemy, aby wartość parametrów aktualnych była zmieniana wewnątrz funkcji, lub gdy
w miejsce parametrów chcemy wstawić wartości liczbowe.
Przekazywanie parametrów przez referencję jest stosowane w sytuacji, gdy chcemy,
aby zmiany dokonywane na parametrach wewnątrz funkcji były przekazywane również na
zewnątrz. Chcemy aby zmieniana była wartość parametru aktualnego.
Slide 6
Przekazywanie argumentów przez wskaźnik
Ale o tym później ;-)
Slide 7
Zapoznaj się z materiałem na podanej niżej stronie i wykonaj
zadanie domowe (na końcu strony)
http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Przekazywanieargumentow-funkcji-przez-referencje/356