Implicitné argumenty

Č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