Implicitné argumenty

This error is generated automatically. I am sorry, but this page is NOT available in English. The page You see right now, is here for compatibility purpose only. I am sorry for any inconvenience. It seems You've been on Slovak only page and clicked the note on the bottom. So - do You or do You not understand Slovak? Anyway - bottom line - this page is not available in English. Do You want to return to main page in English?

Čo sú implicitné argumenty

Argumenty funkcie, je to čo do nej vstupuje... Majme funkciu, ktorá vracia maximálne prirodzené číslo. Teda ak do nej vstupujú kladné čísla, tak vráti najväčšie kladné číslo. Ak vstupujú do nej kladné aj záporné čísla, vráti najväčšie kladné číslo. Ak do nej vstupujú len záporné čísla vráti nulu. Funkcia má fungovať pre rôzny počet parametrov povedzme 0 až 3. Dalo by sa to realizovať cez preťažené funkcie.
...
int MaxP (void){
  return 0;    }

int MaxP (int a){
  return (a>0?a:0);}

int MaxP (int a,int b){
  if ((a<0) && (b<0))return 0;
  if ((a>0) && (b<=0))return a;
  if ((a<=0) && (b>0))return b;
  if ((a>0) && (b>0))return (a>b?a:b);
  else return 0;}

int MaxP (int a,int b, int c){
 if (a<0) a=0;
 if (b<0) b=0;
 if (c<0) c=0;

 if ((a>=b) && (a>=c))return a;
 if ((b>=c) && (b>=a))return b;
 if ((c>=a) && (c>=b))return c;
}
...
V tretej funkcii je vidieť zaujímavý prístup. Premenné, ktoré su menšie ako 0 sa nastavia na 0 - pretože 0 je najmenšia hodnota, ktorú funkcia môže vrátiť. Bolo by super keby sa všetky parametre, ktoré do funkcie zabudnú vstúpiť, nastavili nejak na nulu. Celé by sa to značne zjednodušilo. No a implicitné argumenty sú presne na to :) Ak prepíšem hornú preťaženú funkciu pomocou implicitných parametrov, celé sa to značne zjednoduší...
...
int MaxP (int a=0,int b=0, int c=0){
 if (a<0) a=0;
 if (b<0) b=0;
 if (c<0) c=0;

 if ((a>=b) && (a>=c))return a;
 if ((b>=c) && (b>=a))return b;
 if ((c>=a) && (c>=b))return c;
}
...
Funkcia samozrejme bude fungovať, ak do nej vstúpia dva, jeden, prípadne žiaden argument... A o tom sú celé implicitné parametre.
Pri implicitných parametroch je dôležité pamätať to, že ak nejaký parameter nastavím ako implicitný, je nutné nastaviť ako implicitné aj všetky ďalšie... Zápis
int MaxP (int a=0,int b=0, int c);
je teda nesprávny...

(c) Wray 2006