Użycie funkcji bez przypisywania wartości wszystkich argumentów.

0

Witam w moim wątku. Nie jestem jeszcze jakimś wymiataczem, uczę się programować z kilka miesięcy. ;] Mam taki kod:

 
#include <iostream>

    using namespace std;

bool funkcja(bool zmienna_1 = 0, bool zmienna_2 = 0, bool zmienna_3 = 0, int zmienna_switch = 0){

    switch(zmienna_switch){

    case 1:
    return zmienna_1;
    break;

    case 2:
    return zmienna_2;
    break;

    case 3:
    return zmienna_3;
    break;

    default:
    return 0;
    break;

    }

}

int main(){

    cout << funkcja(0,0,0,1);

    return 0;

}



Jest to bardzo prosty programik w C++ napisany na potrzeby tego wątku który ma po prostu zwracać wybraną wartość zmiennych typu bool w zalezności od wartości zmienna_switch.

Cały problem tego wątku jest w funkcji main(). Jest tam wywołanie funkcja() z 4-ma argumentami. Generalnie chcę się dowiedzieć czy przy każdym wywołaniu trzeba nadpisać wartości wszystkich argumentów czy jest jakiś sposób na nadpisanie jedynie wybranych? Jest to uciążliwe bo np. żeby zmienić wartość jednej zmiennej zdefiniowanej jako ostatnia na końcu dajmy na to, 10 zmiennych*, trzeba pamiętać te 9 standardowych wartości argumentów, które trzeba powtórzyć przy nie mówiąc już o wielokrotnym wpisaniu tego w kodzie.

(chyba wyolbrzymiam ale jedynie przewiduje taki przypadek)

Zamienienie argumentów funkcji na zwykłe zdefiniowane zmienne w ciele funkcji raczej nie jest rozwiązaniem bo chcę sobie zostawić możliwość zmieniania ich wartości.

Wiem, że wartości argumentów da się przypisywać po kolei i nie trzeba podawać przy wywołaniu wszystkich wartości zmiennych jeśli mają z góry przypisane wartości podczas definiowania ale te, którym jednak ponownie przypisuje się wartości przy wywołaniu, muszą być przypisywane po kolei.

Podczas pisania tego posta, wpadłem na pomysł żeby przy małej ilości zmiennych warunkujących coś, ustawiać najczęściej zmieniane argumenty jako zdefiniowane najwcześniej czyli:

 

bool funkcja( int zmienna_switch = 0, bool zmienna_1 = 0, bool zmienna_2 = 0, bool zmienna_3 = 0);

Ale to nadal nie rozwiązuje mojego problemu bo przy większej ilości zmiennych używanych przez pętle, funkcje warunkowe itd. dalej pozostaje problem co zrobić z tymi co są za lub przed, a nie chce się im przypisywać wartości. (tutaj dodam nie istniejącą w powyższym kodzie zmienną)

 

bool funkcja( int zmienna_switch = 0, int zmienna_switch_2 = 0, bool zmienna_1 = 0, bool zmienna_2 = 0, bool zmienna_3 = 0);

Wywołanie

 

funkcja(  // chcę przypisać wartość jedynie zmienna_switch_2, a zmienna_switch i inne chciałbym zostawić nie tkniętą ;] );

Słyszałem że jest jakaś sztuczka ze wskaźnikami które pozwalają wywołać w ten sposób funkcję, ale może są jakieś bardziej ludzkie sposoby ;]? No nie wiem, podanie numeru argumentu i wpisanie w niego wartości (proszę się nie śmiać, tylko fantazjuje ;])

Liczę na pomoc, jeśli coś jest nie jasne to postaram się wyjaśnić. Pozdrawiam.

3

Nie ma takiej opcji w C++. To co chcesz to się nazywa keyword arguments i C++ tego nie wspiera. Zamiast tego można zasymulować przy pomocy struktury:

struct Foo {
  int a = 0;
  int b = 0;
  int c = 0;
};

void bar(Foo _) {}

int main() {
  Foo foo;
  foo.a = 10;
  bar(foo);

  return 0;
}
0

Szczerze mówiąc nie wpadłem na to, że za argument da się zdefiniować obiekt :)

Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1