Metody (funkce) v C++

Přehled informací

Použití metod v programech v C++

Funkce jsou nezávislé jednotky, které se skládají z deklarace, definice a příkazů. Pomocí funkcí lze rozložit komplexní problém na menší, přehledné dílčí problémy. Rozdělení na tyto nezávislé jednotky umožňuje vyhnout se opakovanému psaní úseků kódu.

Syntaxe deklarace metody (funkce)

  [paměťová_třída] typ_návratové_hodnoty 
    jméno_metody ([parametry])[cv-modifikátor]
  [throw(seznam_výjimek)]
  {
    tělo_metody
  }

Argumenty deklarace

paměťová_třída
Nepovinná. Jako paměťovou třídu lze použít klíčová slova extern, static a virtual - určující viditelnost funkce.
typ_návratové_hodnoty
Povinná. Stanoví typ návratové hodnoty z funkce. Funkce smí vracet libolný typ proměnné kromě pole a funkce. Lze obejít použitím ukazatele nebo reference na pole (funkci).
jméno_metody
Povinná. Identifikátor (jméno) deklarované metody. Může být doplněn jménem třídy nebo prostoru jmen.
parametry
Uvedení typu a jména formálních parametrů oddělených čárkami. Parametrům zde mohou být přiřazeny implicitní hodnoty.
cv-modifikátor
  Jeden nebo oba z modifikátorů const a volatile.
seznam_výjimek
  Seznam výjimek, které se mohou z funkce šířit.
tělo_funkce
  Blok příkazů uzavřený do bloku.

Poznámka - návratová hodnota

Každá metoda musí vracet návratovou hodnotu typu typ_návratové_hodnoty. Hodnota je z funkce předána pomocí příkazu

  return(hodnota);

Příklad deklarace metody pro zjištění většího ze dvou prvků

  int maximum (int a, int b)
  {
    if (a > b)
      return(a);
    else
      return(b);
  }

Volání metody v C++ se uskuteční příkazem

  proměnná = jméno_metody (argumenty);

Příklad volání metody maximum:

  vysledek = maximum (10, 20);      // funkce vrátí hodnotu 20

Parametry metody

Parametry předávají hodnoty mezi volající a volanou funkcí. Parametry jsou lokální proměnné, jejichž rozsah je blok tvořící tělo volané funkce. V C++ je možné použít dva způsoby předání hodnot funkci:

Předání hodnot hodnotou - kopírování hodnot

Při předání skutečného parametru hodnotou se do lokální proměnné volané funkce okopíruje hodnota předávaného skutečného parametru. To zajistí, že volaná funkce nezmění proměnnou, kterou předáváme jako skutečný parametr.

Příklad předání hodnot funkci hodnotou

  #include <stdio.h>
  void tisk(int param)
  {
    printf("\tParametr po vstupu do funkce má hodnotu: %d\n", param);
    param = param+param;
    printf("\tParametr po výpočtu má hodnotu: %d\n", param);
  }
  void main()
  {
    int cislo = 50;
    printf("Parametr před vstupem do funkce má hodnotu: %d\n", cislo);
    tisk(cislo);
    printf("Parametr po opustění funkce
      má hodnotu: %d\n", cislo);
  }

Po spuštění programu se objeví následující výpis:

  Parametr před vstupem do funkce má hodnotu: 50
        Parametr po vstupu do funkce má hodnotu: 50
        Parametr po výpočtu má hodnotu: 100
  Parametr po opustění funkce má hodnotu: 50

Předání hodnot odkazem - kopírování adres

Při předání skutečného parametru odkazem se do lokální proměnné volané funkce okopíruje adresa předávaného skutečného parametru (funkci předáme ukazatel na skutečnou proměnnou). To zajistí, že volaná funkce může měnit proměnnou, kterou předáváme jako skutečný parametr.

Příklad předání hodnot funkci hodnotou

  #include <stdio.h>
  void tisk(int *param)
  {
    printf("\tParametr po vstupu do funkce má hodnotu: %d\n", param);
    param = param+param;
    printf("\tParametr po výpočtu má hodnotu: %d\n", param);
  }
  void main()
  {
    int cislo = 50;
    printf("Parametr před vstupem do funkce má hodnotu: %d\n", cislo);
    tisk(&cislo);            // předáváme adresu na proměnnou
    printf("Parametr po opustění funkce má hodnotu: %d\n", cislo);
  }

Po spuštění programu se objeví následující výpis:

  Parametr před vstupem do funkce má hodnotu: 50
        Parametr po vstupu do funkce má hodnotu: 50
        Parametr po výpočtu má hodnotu: 100
  Parametr po opustění funkce má hodnotu: 100

Předání hodnot odkazem se zákazem změny hodnoty v proměnné

Někdy potřebujeme předat hodnotu odkazem (např. pole), ale funkce nesmí změnit hodnoty jednotlivých prvků. Pro tento účel použijeme následující volání funkce:

  typ jméno_funkce(const typ_parametru *jméno:proměnné, 
       další_parametry, ....);

Modifikátor const zajistí, že nedojde ke změně hodnot v proměnné, která byla předaná odkzem.

Přetěžování funkcí

Programovací jazyk C++ dovoluje definici více funkcí stejného jména lišící se počtem nebo typem parametrů. Přetížené funkce se rozlišují již v době překladu programu. Překladač si doplní identifikátor funkce znakovým řetězcem obsahujícím informace o počtu a typech parametrů. Interně poté pracuje s jednoznačnými jmény.

Přetěžování funkcí se zavádí, implementujeme-li například více verzí algoritmu ... . Umožňuje nám to nezavádět více identifikátorů pro různé varianty téže funkce.

Pravidla platná při přetěžování funkcí

Rozsah platnosti metody

Rozsah platnosti metody, definuje oblast programu, ve které je metoda přístupná (je ji možné volat). Jakmile vytvoříme v C++ metodu, je tato metoda přístupná pouze ve třídě, v níž byla metoda definována. To znamená, že program nemůže volat metody z jiné třídy.

Rozsah platnosti funkcí je možné měnit (určovat) pomocí modifikátorů: