3) C++ funkce Flashcards

1
Q

pojem funkce

A

Funkce je vlastně podprogram, který přijímá nějaké parametry (argumenty) a většinou také vrací nějakou hodnotu. Je to blok příkazů, který je nejdříve definován a poté může být volán. Využívá se v komplexnějších programech, kdy se dlouhý kód „rozbije“ na menší podprogramy. S funkcemi se stává kód přehlednější a efektivnější. Když program narazí v kódu na volání funkce, přeskočí na její tělo (v definici funkce) a vykoná jeho příkazy. Poté příkazem return vrátí určitou hodnotu a program se vrátí zpět na řádek následující po volání funkce. S funkcí poté můžeme pracovat např. jako s výrazem (má nějakou hodnotu).

Každý program v C++ musí obsahovat alespoň jednu funkci – tou je vždy funkce main(). Z funkce main poté můžeme volat další funkce a z nich opět další. Každá funkce se skládá z klíčového slova určujícího typ vrácené hodnoty funkce (int, double…), z názvu funkce (identifikátoru) a seznamu přijatých parametrů uzavřených v kulatých závorkách. Každý parametr může být jiného typu. Každá funkce musí být před použitím deklarována (musí být napsán její tzv. prototyp) a poté definována. Prototyp funkce obvykle uvádíme ještě před funkcí main; na konci těla každé funkce (kromě funkcí typu void, kdy nevrací žádnou hodnotu) uvádíme příkaz return, za nějž uvedeme hodnotu, kterou bude funkce vracet. Poté například když přiřadíme funkci do proměnné:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

definice funkce

A

Definice funkce obsahuje opět seznam parametrů uzavřený v kulatých závorkách a tělo (blok příkazů), které se při volání funkce provede.

Parametry musí být ve stejném pořadí a stejného typu jako v deklaraci.
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
typ_vracene_hondoty nazev(typ parametr1, typ parametrN) 
{
  prikazy; 
  return výraz;
}
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

umístění definice funkce, hlavičkové soubory

A

Jsou to soubory, obvykle s příponou .h, které obsahují předdefinované funkce, objekty atp…

Používání vlastních hlavičkových souborů opět oceníme v komplexnějších programech, ve kterých používáme např. mnoho funkcí, tříd, atp. Do programu je vkládáme direktivou #include; princip je takový, že obsah hlavičkového souboru je jakoby vložen do našeho programu místo #include “stdafx.h”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

volání funkce

A

Volání funkce:

```csharp
nazev(argument1,argument2,argumentN);
~~~

např.:

```csharp
int a=2,b=3,c=4;
cout &laquo_space;spoctiObjem(a,b,c);
int objem = spoctiObjem(a,b,c);

~~~

Volat funkci můžeme až po její deklaraci. Při volání funkce předáváme funkci určité parametry, se kterými funkce pracuje jako s lokálními proměnnými.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

lokální a globální proměnné

A

Lokální a globální proměnné

Ve funkcích si můžeme vytvářet proměnné. Tyto proměnné budou lokální, to znamená, že budou existovat pouze uvnitř funkce, nemůžeme s nimi manipulovat odjinud než z funkce, ve které byly vytvořeny. Po skončení funkce nejsou dále dostupné. S argumenty, které předáváme funkci, poté pracujeme pod názvy parametrů v definici funkce a jako s lokálními proměnnými. Lokální proměnné nemusí být přístupné z celé funkce, můžeme například vytvořit proměnnou v bloku uvnitř funkce a ta bude přístupna pouze z tohoto bloku. Takže tedy: lokální proměnné jsou přístupné pouze z bloku, ve kterém byly deklarovány (vytvořeny):

Globální proměnné jsou proměnné, které jsou deklarovány v prostoru mimo jakoukoliv funkci; můžeme k nim přistupovat ze všech funkcí. Pokud máme v nějaké funkci lokální proměnnou se stejným názvem, jako má už nějaká existující globální proměnná, je v oné funkci globální proměnná “skryta” a pracuje se s proměnnou lokální. Globální proměnné v C++ raději nepoužíváme, protože k nim může přistupovat jakákoliv funkce, což může být v komplexnějších programech velmi nepřehledné a nebezpečné.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

typy parametrů funkcí

A

Reference jako parametr funkce

Potřebujeme, aby nějaká funkce pracovala s již vytvořenými daty, předanými parametry a ne pouze s jejich kopiemi. Můžeme k jejich předání použít referenci. Uvažujme například funkci, která má za úkol prohodit dvě hodnoty typu double.

Předávání parametrů referencí má ještě jednu, mnohdy velkou výhodu. Tento parametr se totiž nemusí kopírovat do nově vytvořené proměnné či objektu, ale funkci pouze řekne, kam k němu má přistupovat. U obyčejných proměnných na tom běžně nezáleží, co když ale budeme mít objekt třídy zabírající v paměti několik kilobytů.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Přetěžování funkcí

A

C++ je dovoleno vytvořit více funkcí se stejným názvem. Tyto funkce však musí mít rozdílný počet nebo typy parametrů. Typ vrácené hodnoty může být stejný.
Přetěžování funkcí nazýváme polymorfizmus. S polymorfizmem můžete deklarovat více funkcí stejného názvu, správná z nich bude volána na základě argumentů, které jsou jí předány.

Pod pojmem přetěžování si většina lidí představí něco, co by se nemělo provádět, že to zřejmě škodí programu, ale to není pravda – přetěžování funkcí je běžná programovací technika. Využívá se jí zejména při vytváření funkcí provádějících stejnou činnost, ale s různými typy čísel:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly