IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Funkcie a prototypy v C ++

Funkcie v C ++
Bez funkcií sa v programovaní nezaobídete. Sú to vlastne algoritmy, pomocou ktorých pracujete s dátami. Určite ste v matematike brali funkcie, tak viete že musí mať určitý predpis, pomocou ktorého sa dosiahne požadovaný výsledok. Do danej funkcie sa potom dosadia dáta (ako parametre), s ktorými je potom vnútri nejakým spôsobom manipulovalo. Tak to by mohla byť stručná definícia pojmu funkcie v jazyku C ++, ale teraz už konkrétnejšie.

Tak dajme tomu, že chcete vytvoriť funkciu, ktorá vám spočíta druhú mocninu nejakého čísla. Táto funkcia by mohla vyzerať napríklad takto:

//lekce4.cpp
#include <iostream>
using namespace std;

int Umocni(int x)
{
    return x*x;
}

int main()
{
    cout << "Zadejte cislo: ";
    int x;
    cin >> x;
    cout << "Druha mocnina cisla " << x <<" je "
         << Umocni(x) << endl;
    return 0;
}

Tak a funkcia je na svete :) Ako ste si iste všimli, nesie názov umocní (), ktorý dokonale vystihuje jej účel. Pozrite sa ešte raz na definíciu funkcie:

int Umocni(int x)
{
    return x*x;
}

Prvý riadok sa nazýva hlavička funkcie. Kľúčové slovo int pred názvom funkcie symbolizuje typ návratovej hodnoty funkcie, teda typ dát, ktorý sa vracia vo funkcií pomocou príkazu return. Tu sa jedná konkrétne o celé číslo. Za názvom funkcie nasledujú okrúhle zátvorky so zoznamom parametrov oddelených čiarkou. Táto funkcia má iba jeden parameter typu int. Hlavička funkcia je nasledovaná telom funkcie, ktoré je uzavreté do zložených zátvoriek. Do tela sa zapisujú všetky príkazy, ktoré má funkcia vykonať. V tomto prípade je tu príkaz x x , ktorého výsledkom je celé číslo, ktoré je miesto tohto výrazu x x * akoby vnútorne nahradené a vrátený príkazom *return.

Určite vám to teraz pripomína funkciu main (). Je to úplne to isté ...

Vytváranie funkčných prototypov

Funkčné prototypy sú ďalšie vecičkou, ktorá je pre vlastné funkcie veľa dôležitá. No vlastne ani tak nie pre funkcie, ako skôr pre kompilátor. Prorotyp mu totiž hovorí všetky potrebné informácie o funkcii, ako je jej meno, návratovú hodnotu a typy parametrov. Jednoducho ho môžete vytvoriť tak, že skopírujete hlavičku funkcie a pridáte bodkočiarka. V predchádzajúcom príklade bol tento prototyp zároveň definíciou. Pozrime sa teda, ako môžeme našej funkciu upraviť, aby bol prototyp vyžadovaný:

//lekce4.cpp
#include <iostream>
using namespace std;

int Umocni(int x); //Prototyp funkce


int main()
{
    cout << "Zadejte cislo: ";
    int x;
    cin >> x;
    cout << "Druha mocnina cisla " << x <<" je "
         << Umocni(x) << endl;
    return 0;
}

int Umocni(int x)
{
    return x*x;
}

Ak by tu prototyp nebol, kompilátor by nahlásil chybu, že nebol deklarovaný identifikátor umocní. Onou deklaráciou sa rozumie samotný prototyp funkcie. Ono je to aj celkom logické. Veď používate funkciu, o ktorej kompilátor normálne nič nevie, nevie aké má očakávať parametre, ich počet, ani či popr. akú vracia hodnotu. Potrebuje teda poznať prototyp tejto funkcie. Tento sa umiestňuje väčšinou pred definíciu funkcie main (), alebo, ešte častejšie, do hlavičkových súborov (tie sú potom vkladané pomocou Directive #include, ako už viete).

Ukážme si ale ešte jeden prípad - ten sa používa najčastejšie. Majme tri súbory - hlavné, s funkciou main (), hlavičkový - s deklaráciou (čiže prototypom) funkcie umocní, a súbor s jej definíciou.

Hlavičkový súbor funkcie umocní ():

//umocni.h
int Umocni(int x);

Súbor s definíciou funkcie umocní ():

//umocni.cpp
int Umocni(int x)
{
    return x*x;
}

No a konečne hlavný zdrojový súbor, kde dáme všetko dokopy:

//main.cpp
#include <iostream>
#include "umocni.h"
using namespace std;

int main()
{
    cout << "Zadejte cislo: ";
    int x;
    cin >> x;
    cout << "Druha mocnina cisla " << x <<" je "
         << Umocni(x) << endl;
    return 0;
}

Určite ste si všimli že pribudla jedna Directiva #include, ktorá vloží hlavičkový súbor umocni.h - sprístupní tým deklaráciu funkcie umocní (). Pozorný čitateľ sa určite pozastavil nad tým, prečo je tu súbor v úvodzovkách a nie vo skosených zátvorkách. Asi by som to mal vysvetliť, jedná sa o celkom dôležitú vec.

Takže poporiadku. Ak používate nejaké vývojové prostredie, sú v ňom definované určitej absolútnej cesty k niektorým dôležitým súborom - či už hlavičkovým, tak napríklad zdrojovým. Ale k čomu nám tahle informácie vlastne je? No je to o tom, že ak použijeme verziu so skosenými zátvorkami, tak prvá vec, ktorú preprocesor pri spracovaní tejto direktívy urobí je, že prehľadá práve tieto cesty. Ak v žiadnej z týchto definovaných ciest daný súbor nenájde, nahlási chybu. U druhého variantu, tej s úvodzovkami, je to inak. Tu priamo určujete cestu, či už absolútne, alebo relatívne k umiestneniu súboru, v ktorom je táto direktíva umiestnená. Ak preprocesor súbor nenájde, začne prehľadávať cesty definované vývojovým prostredím, viď. vyššie. Možno by sa tu hodila menšie poznámka - ak zadávate cestu, používajte pre znak lomky (\) jeho escape sekvenciu (\\) - teda dve lomítka za sebou. Je to preto že lomítko je špeciálny znak, ktorý bude pred escape sekvencie. Vysvetlenie si necháme na inokedy, zatiaľ postačí, keď namiesto jedného lomky použijeme dve. :)


 

Všetky články v sekcii
Zdrojákoviště C ++ - Základná konštrukcia
Článok pre vás napísal Jiří Pipošiar
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Moc toho tady o sobě prozrazovat nebudu, raději:)) Takže momentálně žiju v Klatovech(velkoměsto v západních Čechách), a 22.5.2003 jsem zde i odmaturoval na střední průmyslové škole. No a novinka - byl jsem přijat na Západočeskou univerzitu - Faku...
Aktivity