• 1

VI Funkcje, zmienne static, referencje.

Funkcje w języku c++ są deklarowane w dużych programach w plikach nagłówkowych.

My jednak ograniczymy się tylko do deklaracji w pliku cpp.

Deklarujemy funkcję następująco:

void NaszaFunkcja(int parametrPierwszy, int parametrDrugi){

//instrukcje do wykonania przez funkcje

}

Z powyższego zapisu wynika, że zadeklarowaliśmy funkcję, która nie zwraca nam żadnego parametru (okreslenie void przed funkcją), i przyjmuje dwa parametry, które są liczbami całkowitymi (parametrPierwszy, parametrDrugi).

Niech nasza funkcja wypisuje sumę dwóch liczb podanych w parametrach:

void NaszaFunkcja(int parametrPierwszy, int parametrDrugi){

cout << parametrPierwszy + parametrDrugi << endl;

}

Jeżeli umieścimy naszą funkcję przed funkcją główną int main() to kompilator bez problemu będzie mógł się nią posłużyć. Jednak bardzo często takich funkcji kilka, kilkanaście i dlatego przed funkcją main() umieszczamy tylko nagłówek funkcji:

#include<iostream>

using namespace std;

void NaszaFunkcja(int parametrPierwszy, int parametrDrugi); 

int main() {

}

Wywołanie funkcji w programie jest bardzo proste. Podajemy nazwę funkcji oraz w nawiasie zmienne do wykorzystania w funkcji:

NaszaFunkcja(liczbaPierwsza, liczbaDruga); 

Funkcja może również przyjmować parametry domniemane. Użycie parametrów domniemanych pozwala nam opuszczenie wpisywania za każdym razem wszystkich zmiennych do funkcji. 

Przykładem takiej funkcji może być funkcja licząca sinus kąta. Jak wiemy z zajęć funkcje matematyczne liczą sinus kąta podanego w radianach. 

double sinus(double kat, bool stopien = true);

Zadeklarowaliśmy, że funkcja sinus będzie nam zwracać liczbę double oraz przyjmuje dwa argumenty (zmienną double kat, oraz zmienną bool stopien). Dodatkowo zmienna stopien jeżeli do funkcji nie zostanie podany drugi argument przyjmie wartość true.

Kod naszej funkcji:

double sinus(double kat, bool stopien)

{

if (stopien)

kat = kat * M_PI / 180;

return sin(kat);

}

Wywołanie wewnątrz funkcji main jest następujące:

//wywolanie funkcji kat - policzy kat w stopniach i wypiszemy go;

cout << sinus(liczbaTrzecia, true) << endl;

//wywolanie funkcji kat - policzy kat w radianach i wypiszemy go;

cout << sinus(liczbaTrzecia, false) << endl;

//wywolanie funkcji kat - policzy kat w stopniach i wypiszemy go ale wykorzysta parametr domniemany;

cout << sinus(liczbaTrzecia) << endl;

Funkcje podczas wywoływania i działania na zmiennych przekazanych do nich tworzą ich lokalną kopię. Funkcja 

void sumowanie(int pierwsza, int druga) {

pierwsza += druga;

}

Nie zmieni nam wartości parametru pierwsza. Działanie na parametrach funkcji i ich modyfikacja jest jednak możliwa. Wykorzystujemy do tego celu referencję (dodajemy & przed nazwą zmiennej). 

void sumowanie(int &pierwsza, int druga) {

pierwsza += druga;

}

Funkcją taką posługujemy się jak każdą inną. 

 

Modyfikator static sprawia, że obiekt w danej funkcji jest umieszczany w tej samej pamięci, co zmienna globalna i nie jest usuwany wraz z zakończeniem funkcji.

void czerwona(void)

{

static int ktoryRaz;

ktoryRaz++;

cout << "Funkacja czerwona wywolana " << ktoryRaz << " raz\n";

}

zmienna ktoryRaz będzie pamiętać kolejne wywołania funkcji. Jest to zalecany sposób aby obejść użycie zmiennych globalnych w programie. 

W załączniku umieszczam kod programu wykorzystujący powyższe informacje. Zapraszam do przeanalizowania.