Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

Tworzenie i wywoływanie funkcji w C++


powrót

Tworzenie funkcji w C++

Funkcje w C++ możemy tworzyć na kilka sposobów:

W artykule dodatkowo zostanie opisany sposób wywoływania funkcji wraz z przykładami.

Sposób I

Między bibliotekami a funkcją main().

Przeanalizujmy przykład:

#include <iostream>
using namespace std;

//definicja funkcji wraz z jej ciałem

typ_funkcji nazwa_funkcji(lista argumentów)
{
	//ciało funkcji
	return wartość; 
}

int main()
{
	//instrukcje funkcji main

	return 0;
}

Całą funkcję wraz z jej instrukcjami tworzymy przed główną funkcją main()

Sposób II

Deklaracja samych prototypów funkcji przed funkcją main()

Drugi sposób polega na wstawieniu przed funkcją main() samych prototypów nazw funkcji, natomiast ich ciała są zaimplementowane pod funkcją main():

#include <iostream>
using namespace std;

//definicja funkcji wraz z jej ciałem
//przy tworzeniu prototypów wstawiamy
//średnik na końcu funkcji

typ_funkcji1 nazwa_funkcji(lista argumentów);
typ_funkcji2 nazwa_funkcji_drugiej(lista argumentów); 
...

int main()
{
	//instrukcje funkcji main
	return 0;
}

//implementacje funkcji zadeklarowanych powyżej
typ_funkcji1 nazwa_funkcji(lista argumentów)
{
	//instrukcje funkcji
	return wartość; 
}

//implementacja funkcji zadeklarowanej powyżej
typ_funkcji2 nazwa_funkcji_drugiej(lista argumentów)
{
	//instrukcje funkcji
	return wartość; 
}

Taki sposób tworzenia funkcji jest wygodny, w przypadku dużej ich ilości. Aby sterować aplikacją, nie musimy błądzić przez gąszcz zaimplenyowanych funkcji.

Sposób III

W oddzielnej bibliotece.

Ostatni sposób polega na implementacji funkcji w oddzielnym pliku nazywanym biblioteką. Plik ten posiada rozszerzenie *.h Aby korzystać z napisanych funkcji, trzeba dodać tę bibliotekę w nagłówku programu. Prześledźmy przykład:

Załóżmy, że nasza biblioteka ma nazwę biblioteka.h

Plik biblioteka.h

#ifndef biblioteka_h
#define biblioteka_h
//w tej części definiujemy i implementujemy nasze funkcje
typ_funkcji nazwa(lista argumentów)
{
	return wartość;
}

typ_funkcji druga_funkcja(lista argumentów)
{
	//instrukcje funkcji
	return wartość;
}
...
#endif

Aby korzystać z własnej biblioteki, musisz ją dodać do projektu programu. Wystarczy teraz, że dodasz jej względną ścieżkę w nagłówku aplikacji w następujący sposób:

#include "biblioteka.h"

Zauważ, że pojawiły się dodatkowe dyrektywy:

#ifndef biblioteka_h
#define biblioteka_h

...

#endif

Podczas konsolidacji kodu obiektowego, do naszego programu dołączane są pliki zwane bibliotekami. Aby zapobiec wielokrotnemu dodaniu naszej biblioteki do programu, zabezpieczamy się dyrektywą, która sprawdza, czy dana biblioteka nie została już wcześniej dołączona. #ifndef biblioteka_h- można przetłumaczyć: "jeśli nie zdefiniowano ciągu znaków biblioteka_h", #define biblioteka_h - "zdefiniuj ciąg znaków biblioteka_h" i dołącz nagłówek pliku biblioteka.h do programu, #endif - koniec bloku #ifndef.

Przykład 1

Stworzymy dwie funkcje:

  • double max(double, double) - wyznaczającą wartość maksymalną, z podanych dwóch liczb rzeczywistych
  • void hello() - wyświetlającą na ekranie treść: "Witaj programisto!!!"

sposobami omówionymi powyżej.

Sposób I

#include <iostream>
using namespace std;

double max(double a,double b)
{
	if(a>b)
		return a;
	return b;
}

void hello()
{	
	cout<<"Witaj programisto!!!";
}

int main()
{
	//wywołanie funkcji max
	cout<<"Wartość maksymalna z liczb 5.2 i 7.3 wynosi: "<<max(5.2, 7.3)<<endl;

	//wywołanie funkcji hello
	hello();

	cout<<endl;
	
	return 0;
}

Sposób II

#include <iostream>
using namespace std;

//definicja prototypów funkcji max i hello

//zauważmy, że wystarczy podać typy argumentów bez ich nazw
double max(double, double); 
void hello();

int main()
{
	//wywołanie funkcji max
	cout<<"Wartość maksymalna z liczb 5.2 i 7.3 wynosi: "<<max(5.2, 7.3)<<endl;

	//wywołanie funkcji hello
	hello();

	cout<<endl;

	return 0;
}

//pełne definicje funkcji
double max(double a, double b)
{
	if(a>b)
		return a;
	else
		return b;
}

void hello()
{
	cout<<"Witaj programisto!!!";
}

Sposób III

biblioteka.h
#ifndef biblioteka_h
#define biblioteka_h

double max(double a, double b)
{
	if(a>b)
		return a;
	else
		return b;
}

void hello()
{
	cout<<"Witaj programisto!!!";
}
#endif
biblioteka.cpp
#include <iostream>
using namespace std;

#include "biblioteka.h"

int main()
{
	double a, b;
	cout<<"Podaj dwie liczby: ";
	cin>>a>>b;

	//wywołanie funkcji max, która jest zdefiniowana w bibliotece biblioteka.h
	cout<<"Wartość maksymalna liczb "<<a<<" i "<<b<<" wynosi: "<<max(a,b)<<endl;

	return 0;
}

Wywoływanie funkcji

Aby wywołać funkcję w C++, należy podać jej nazwę oraz argumenty (jeśli takie posiada), zwracając uwagę, na zgodność typów argumentów:

jeśli funkcja o nazwie "f" pobiera następujące typy f(int a, char b), oznacza to, że przy uruchomieniu tej funkcji pierwszym argumentem musi być liczba typu int, a drugim argumentem musi być znak np.:

//wywołanie funkcji f

f(123,'a');

lub

int a = 3;

char znak = 'p';

//wywołanie funkcji f

f(a,znak);

Funkcje niezwracające wartości wywołujemy podając tylko ich nazwę, natomiast funkcje z wartością zwrotną przypisujemy do odpowiednich zmiennych lub kierujemy na wyjście do pliku lub na ekran (wypisujemy wynik na ekranie).

Podprogramy (funkcje) możemy wywoływać w głównej funkcji main() lub z wnętrza innych funkcji, metod, itd..

Przeanalizujmy przykłady:

Stworzymy dwie funkcje:

  • void sumaA(int, int) - wyświetlająca sumę dwóch liczb całkowitych
  • int sumaB(int, int) - zwracającą sumę dwóch liczb całkowitych
#include <iostream>
using namespace std;

void sumaA(int a, int b)
{
	cout<<"Suma liczb "<<a<<" i "<<b<<" wynosi: "<<a+b<<endl;
}

int sumaB(int a,int b)
{
	return a+b;
}

int main(int argc, char *argv[])
{
	//wywołanie funkcji typu void - bez zwróconej wartosci
	sumaA(2,3);

	//wywołanie funkcji z informacją zwrotna zapisaną w zmiennej suma
	int suma = sumaB(3,6);

	cout<<"Suma liczb 3 i 6 wynosi: "<<suma<<endl;

	return 0;
}