Przeciążenie funkcj w C++


(rooster_pl) #1

mam do zrealizowania ćw z przeciążenia funkcji, oto jego treść:

"Write a function that receives up to three arguments and returns the maximum value received (zero if no arguments were given)"

 

z zastrzeżeniem, aby użyć takiej deklaracji funkcji:

typedef unsigned int u32;

u32 maximum(const u32 = 0, const u32 = 0, const u32 = 0);

 

 

Proszę koderów o sprawdzenie, czy dobrze rozkminiłem to zadanko:


(Drobok) #2

twój kod nie spełnia głównego założenia, połknąłeś ampersandy :stuck_out_tongue:

Mając wartości domyślne nie potrzebnie piszesz kolejny raz funkcję z return 0 (wystarczy dorzucić na końcu funkcji w której sprawdzasz warunki), ba nawet jeśli wartości te są zerami możesz zwrócić którykolwiek z zmiennych (wszędzie masz to co masz zwrócić)

Zapomniałeś o else, warunki się powtarzają nie ma sensu sprawdzać 6x, skoro możesz to zrobić 3x

if (A>B){
      if(A>C) return A;
}else if (B>C) return B;
return C; 

 

Pytanie czy ktoś chce podać liczby jest nie na miejscu, powinieneś zapytać ile liczb chcesz pobrać, albo po prostu je pobrać.

Nie rozumiesz idei przeciążenia, masz wywoływać funkcje raz, chodzi o to że nie podając argumentu masz wartość domyślną nie musisz pisać dwóch różnych funkcji i rozróżniać ich przy wywołaniu


(rooster_pl) #3

W takim razie kiedy będzie mozna wywołać funkce z parametrem? W case? I to mi rozstrzygnie czy użyje adresu komórki do np inta czy u32& ?

Zatem argument funkcji u32&=0 to wartość domyślna? Jak można przetłumaczyć taki zapis?


(Drobok) #4

=X w funkcji, czyli X gdy nie podano argumentu

Tak łopatologicznie:

zmienna=0;

jeśli podano argument zmienna = argument

Np masz funkcję

int dodaj(int X=1,int Y=2){return X+Y;}

gdy wywołasz dodaj() :arrow: zwróci ci 1+2

gdy wywołasz dodaj(10) :arrow: masz 10+2

gdy wywołasz dodaj(10,20) :arrow: 10+20

I nie musisz pisać dwudziestu funkcji o z takim samym kodem

Co do przeciążenia to tak, wywoła odpowiednią funkcję na podstawie typu argumentu jednak tutaj już musisz mieć 2funkcje np:

int dodaj(int X=1,int Y=2){return X+Y;}

int dodaj(unsigned X=1,int Y=2){return X-Y;}

Podając zmienną int / podając wartość np:

dodaj(1,2); uzyskasz 3

A podając zmienną unsigned / rzutując na unsigned

dodaj((unsigned)1,2); uzyskasz -1