Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Prosta funkcja - 2 argumenty przekazywane do funkcji, problem z deklaracją

Ostatnio zmodyfikowano 2014-11-12 21:59
Autor Wiadomość
Uczniak
Temat założony przez niniejszego użytkownika
Prosta funkcja - 2 argumenty przekazywane do funkcji, problem z deklaracją
» 2014-11-12 21:32:56
Witam,
mam pytanie czy funkcja zadeklarowana w ten sposób ma prawo działać? Wydaje mi się, że w wyniku powinienem dostać 5, jednak nie mogę tego skompilować.
int mmo(int x, int y = x){
return x+y+1;
}
int main(int argc, char** argv){
cout << mmo(2) << endl;
return 0;
}
To mój pierwszy post więc proszę o wyrozumiałość.
P-120476
Tomek_z_W11
» 2014-11-12 21:37:28
Po pierwsze, to zapis int mmo(int x, int y=x) jest błędny, jeżeli chcesz pod y przypisać x, to w ciele funkcji, w ten sposób:

int mmo(int x, int y)
{
    y=x;
    return x+y+1;
}

a w momencie w którym wywołujesz funkcje w maine, dajesz funkcji jeden argument, a ona przyjmuje dwa argumenty, także coś się nie zgadza. Powinno być tak:

mmo(1, 2);

Pomijam fakt, że to troche bez sensu dawać funkcji dwa argumenty, z czego de facto korzystasz z jednego, bo ten drugi ma taką samą wartość jak ten pierwszy. Równie dobrze możesz napisać: return x+x+1;
P-120478
Uczniak
Temat założony przez niniejszego użytkownika
» 2014-11-12 21:43:26
ale w deklaracji wolno napisać np int mmo(int x, int y=5)?
Daje jeden argument ponieważ chciałem przypisać wartości y wartość x, zatem podając x podaje dwa argumenty?
Wiem że sama funkcja nie ma sensu użytkowego jednak chodziło mi o taką wariację na temat funkcji.
P-120479
Monika90
» 2014-11-12 21:52:28
Niestety domyślna wartość parametru nie może odowływać się do wcześniej zadeklarowanych parametrów. (Żeby mogła to porządek wartościowania argumentów fukcji musiał by być ustalony jako: od lewej do prawej. A w C++ ten porządek nie jest ustalony w ogóle)

Rozwiązaniem jest dodanie przeciążenia:
C/C++
int mmo( int x, int y ) {
    return x + y + 1;
}

int mmo( int x ) {
    return mmo( x, x );
}
P-120483
Uczniak
Temat założony przez niniejszego użytkownika
» 2014-11-12 21:59:48
Dziękuje bardzo za pomoc:)
P-120485
« 1 »
  Strona 1 z 1