FUNKCIJE U C++ PROGRAMSKOM JEZIKU
Programski jezik C poznaje samo jednu vrstu potprograma koje se nazivaju funkcijama.
Primere iz funkcija možete naći na sledećoj web strani: Funkcije u C/C++ jeziku -primeri
- Deklaracija funkcija
- Definisanje funkcija
- Pozivanje funkcija
Deklaracija funkcija
povratni_tip ime_funkcije(tip_argumenta1 argument1, tip_argumenta2 argument2, ...);
using namespace std;
// Deklaracija funkcije koja računa zbir dva broja
int zbir(int a, int b);
int main() {
cout << "Zbir je: " << rezultat << endl;
return 0; // Kraj programa
// Definicija funkcije zbir koja vraća zbir dva broja
int zbir(int a, int b) {
Definisanje funkcija
Primer definicije funkcije
int proizvod(int x, int y) {
- Naredbe funkcije
- zaglavlje funkcije
- telo funkcije
Primer 1: Određivanje maksimuma dva cela broja
- Zaglavlje funkcije sadrži povratni tip, ime funkcije i listu argumenata.
- Telo funkcije sadrži logiku funkcije.
Prva, u ovom slučaju int, predstavlja tip podatka povratne vrednosti. Ova metoda koja računa veći broj između dva cela broja, vraća taj broj čiji je tip int. To je tip povratne vrednosti.
Druga, predstavlja naziv metode, koji programer bira sam i koji treba da sugeriše svrhu metode.
Telo metode se predstavlja vitičastim zagradama. U telu se nalaze naredbe funkcije.
U zaglavlju funkcije(metode) se, posle naziva, unutar običnih zagrada pišu parametri(argumenti) funkcije. To su podaci koje treba dostaviti funkciji da bi ona mogla da završi postavljen zadatak. U prethodnom primeru zadatak koji funkcija treba da izvrši je određivanje maksimuma između dva cela broja, a podaci koje funkciji preko parametra treba dostaviti su ta dva broja, u ovom slučaju označena kao a i b. Na sledećoj slici je prikazana detaljnije ova metoda.
Ukoliko metoda ne vraća vrednost, neće imati u telu naredbu return podatak, ali može imati samo return. kao tip povratne vrednosti se u tom slučaju piše reč void.
U programu mora postojati najmanje jedna funkcija i to je funkcija main(glavna). Primer main funkcije iz prethodnog primera prikazana je na slici ispod.
Pozivanje funkcija
- Unutar funkcije main().
- Unutar drugih funkcija.
Primer poziva funkcije u main():
using namespace std;
// Deklaracija funkcije koja računa kvadrat broja
int kvadrat(int broj);
int main() {
cout << "Kvadrat broja " << broj << " je: " << kvadrat(broj) << endl;
return 0;
// Definicija funkcije koja računa kvadrat broja
int kvadrat(int broj) {
- Deklaracija funkcije: kvadrat prima jedan ceo broj i vraća njegov kvadrat.
- Glavna funkcija (main): Učitava broj 4, poziva funkciju kvadrat i ispisuje rezultat.
- Definicija funkcije: kvadrat računa proizvod broja sa samim sobom, što predstavlja kvadrat tog broja.
Pozivanje funkcija unutar drugih funkcija:
using namespace std;
// Deklaracije funkcija
int zbir(int a, int b);
int kvadrat_zbira(int a, int b);
int main() {
cout << "Kvadrat zbira je: " << rezultat << endl;
return 0;
// Definicija funkcije koja računa zbir dva broja
int zbir(int a, int b) {
// Definicija funkcije koja računa kvadrat zbira dva broja
int kvadrat_zbira(int a, int b) {
return z * z;
- Deklaracije funkcija: Funkcija zbir računa zbir dva broja, dok kvadrat_zbira računa kvadrat zbira dva broja.
- Glavna funkcija (main): Poziva funkciju kvadrat_zbira sa brojevima 3 i 4, a rezultat ispisuje na ekranu.
- Definicija funkcija:
- zbir vraća zbir dva broja.
- kvadrat_zbira koristi funkciju zbir da izračuna zbir, a zatim vraća kvadrat tog zbira.
Detaljnije objašnjenje pozivanja funkcija u primeru "Određivanje maksimuma dva broja". Nastavak zadatka
U primeru na slici 3 poziva se funkcija max:
cout<<"Veći broj je "<<max(A,B);
Deklaracija poziva metode, u opštem slučaju izgleda:
naziv_funkcije(parametar1,parametar2,....);
Parametri koji se prosleđuju funkciji, se kopiraju redom u parametre definisane u definisanoj metodi(vidi sliku 2). U definiciji metode se ispred naziva parametra stavlja tip podatka.
int max(int a, int b)
Ovde se zapravo rezerviše nova memorija označena sa a i b koja prima kopije vrednosti parametara iz poziva funkcije:
max(A , B);
U pozivu se ispred parametra ne stavlja tip podatka.
Kopiranje parametra je prikazano na slici 5.
Primer 1-nastavak: Odeđivanje maksimuma dva broja-kod
Učitati dva cela broja i odrediti njihov maksimum koristeći prethodno definisanu funkciju.
using namespace std;
// Funkcija koja određuje maksimum između dva broja
int maksimum(int a, int b) {
int main() {
cout << "Unesite prvi broj: ";
cin >> broj1;
cout << "Unesite drugi broj: ";
cin >> broj2;
cout << "Veći broj je: " << maksimum(broj1, broj2) << endl;
return 0; // Kraj programa
Prosleđivanje parametra po vrednosti i po referenci
Ovo možemo ilustrovati kroz sledeći primer:
Primer 2: Zamena vrednosti podatku
Napravimo funkciju koja će promeniti vrednost poslatom podatku:
Ova vrednost se jeste promenila unutar funkcije promeni_vr, ali se ova promena ne odražava na podatke u glavnoj funkciji.
Da bi ovo bilo ispravno, parametri se moraju preneti po referenci.
Prenos parametara funkcije po referenci
Izmenimo prethodni primer zamenom funkcije koja sada prosleđuje parametre po referenci. Parametri sada zapravo nisu podaci nego pokazivači na te podatke.
Više o pokazivačima vidi u lekciji Pokazivači u C++
Prenos parametara funkcije po pokazivaču
Više o pokazivačima vidi u lekciji Pokazivači u C++.
Prethodni primer sada izgleda kao na slici 10:
Deklaracija funkcija
oznaka_tipa naziv_funkcije(niz_argumenata);
Deklaracija funkcije još se naziva i prototip funkcije, kao i potpis funkcije.
Ako se funkcija nalazi u fajlu iznad main funkcije, kao u prethodnim primerima onda nije potrebno posebno navesti deklaraciju. U suprotnom deklaracije je potrebno napisati iznad main funkcije. Npr. prototip funkcije max bi bio:
int max(int a,int b); ili samo
int max(int ,int);
Prototip funkcije promeni_ref izgleda:
void promeni_ref(int * );
Primeri funkcija sa različitim tipovima povratnih vrednosti i argumentima
1. Funkcija bez povratne vrednosti (void)
Primer:
void pozdrav() {
int main() {
return 0;
Objašnjenje:
- Funkcija pozdrav nema povratnu vrednost jer koristi povratni tip void.
- Izvodi samo jednu akciju - ispisuje poruku.
2. Funkcija sa povratnom vrednošću tipa int
Kod:
int zbir(int a, int b) {
int main() {
cout << "Zbir je: " << rezultat << endl;
return 0;
Funkcija zbir uzima dva argumenta (a i b) i vraća njihov zbir kao rezultat.
3. Funkcija sa povratnom vrednošću tipa double
Kod:
double povrsinaKruga(double r) {
int main() {
double povrsina = povrsinaKruga(r);
cout << "Površina kruga je: " << povrsina << endl;
return 0;
4. Funkcija sa povratnom vrednošću tipa string
string pozdravPoruka(string ime) {
int main() {
cout << pozdravPoruka(ime) << endl;
return 0;
- Funkcija pozdravPoruka prihvata tekstualni argument i vraća personalizovanu poruku.
Rekurzivne funkcije
Rekurzivne funkcije su funkcije koje pozivaju same sebe, direktno ili indirektno. Ovaj pristup omogućava rešavanje problema koji se prirodno mogu podeliti na manje podprobleme.
Za detaljnije objašnjenje i praktične primere, posetite našu stranicu: Rekurzivni algoritmi.
Video lekcija: Funkcije u jeziku C++
Najčešće greške i saveti
Najčešće greške pri radu sa funkcijama
-
Zaboravljena deklaracija funkcije: Ako funkcija nije deklarisana pre njenog poziva, kompajler neće prepoznati funkciju.
Savet: Uvek deklarišite funkcije pre glavne funkcije main() ili koristite zaglavlja. -
Nepodudaranje tipova argumenata: Prosleđivanje argumenata pogrešnog tipa može izazvati greške.
Savet: Proverite tipove argumenata i uskladite ih sa deklaracijom funkcije. -
Nepostojanje povratne vrednosti: Deklarisali ste funkciju da vraća vrednost, ali ste zaboravili
return
.
Savet: Uvek proverite da li funkcija vraća vrednost ako je tip povratne vrednosti različit odvoid
. -
Rekurzija bez osnovnog uslova: Ako funkcija nema uslov koji zaustavlja rekurziju, doći će do beskonačnog poziva.
Savet: Uvek definišite osnovni slučaj (terminirajući uslov) za rekurzivne funkcije.
Povezivanje sa objektno-orijentisanim konceptima
Funkcije i OOP u C++
U okviru klasa, funkcije se nazivaju metodama. One omogućavaju objektima da izvršavaju zadatke i manipulišu svojim podacima.
Primer:
using namespace std;
class Krug {
double poluprecnik;
public:
// Konstruktor za inicijalizaciju poluprečnika
Krug(double r) {
// Metoda za izračunavanje površine
double povrsina() {
int main() {
Krug k(5.0);
// Poziv metode
cout << "Površina kruga je: " << k.povrsina() << endl;
return 0;
Metode kao što je povrsina()
omogućavaju enkapsulaciju logike u klase, čineći kod modularnijim i čitljivijim.
Klasa Krug: Definiše privatni podatak poluprecnik
i javnu metodu povrsina()
, koja izračunava površinu kruga.
Konstruktor: Inicijalizuje poluprecnik
prilikom kreiranja objekta.
Metoda povrsina(): Vraća površinu kruga koristeći formulu π r2.
Glavna funkcija (main): Kreira objekat klase Krug
, poziva metodu povrsina()
i ispisuje rezultat.
Dodatni resursi
Dodatni resursi
-
cppreference.com - Functions
Detaljna dokumentacija sa primerima o funkcijama u C++. -
GeeksforGeeks - Functions in C++
Praktični primeri i objašnjenja funkcija u C++ jeziku. -
LearnCpp - Functions
Sveobuhvatan vodič za učenje funkcija i drugih koncepata C++ jezika. -
Svet Programiranja - Glavna stranica
Lokalni resursi na srpskom jeziku za programere. -
Rekurzivni algoritmi u C++
Stranica posvećena rekurziji i njenoj primeni u programiranju.
Za dodatna pitanja i objašnjenja, kontaktirajte nas putem formi za kontakt.