• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy fukcja może mieć dwa (lub więcej) returnów?

Cloud VPS
0 głosów
1,048 wizyt
pytanie zadane 5 września 2018 w C i C++ przez Mick_SQ6IYV Obywatel (1,020 p.)

Czy podprogram może mieć w swojej strukturze więcej niż jeden return? Sytuacja miałaby wyglądać mniej więcej tak:

int A, B;   // założenie: A różne od B

int PODPROGRAM()
{
	// jakieś funkcje podprogramu
	if(warunek)
	{
		// jakieś funkcje
		return A;
	}
	else
	{
		// jakieś funkcje
		return B;
	}
}

 

2
komentarz 5 września 2018 przez Munvik Dyskutant (9,350 p.)
Oczywiście.

4 odpowiedzi

+3 głosów
odpowiedź 5 września 2018 przez kamilosxp Bywalec (2,090 p.)
Tak, może mieć.
+1 głos
odpowiedź 5 września 2018 przez mokrowski Mędrzec (158,900 p.)
Funkcja może mieć wiele punktów wyjścia w postaci return. W niektórych metodykach/standardach kodowania/standardach przemysłowych, zabrania się lub nie zaleca się wyskakiwania z funkcji kilkoma drogami. Wymaga to "ciągnięcia" odpowiedzi aż do końca funkcji do pojedynczego return. Funkcja może także zwrócić złożoną wartość w postaci struktury, kontenera lub krotki...
0 głosów
odpowiedź 5 września 2018 przez Mick_SQ6IYV Obywatel (1,020 p.)

A czy jest możliwe zwracanie więcej niż jednego argumentu, jak poniżej:

int PODPROGRAM()
{
    int A, B, C, D;          // założenie: A, B, C, D - wyniki działań podprogramu
    // jakieś funkcje podprogramu
    if(warunek)
    {
        // jakieś funkcje
        return (A, B);
    }
    else
    {
        // jakieś funkcje
        return (C, D);
    }
}

A jeżeli nie, to jak można sobie z tym poradzić, kiedy potrzeba zwrócił dwie (lub więcej) wartości??

komentarz 5 września 2018 przez Szfierzak Gaduła (3,750 p.)

Możesz to zrobić na kilka sposobów. Zaczynając od tablicy dynamicznej(mało elegancko)

int *tab = new int[4];
//jakiś kod w którym przypisujesz A,B,C,D do kolejnych miejsc w tablicy.....
return tab;

Podobnie możesz zwrócić też wskaźnik na vector lub listę - równie mało elegancko.

Innym sposobem jest przekazanie parametrów przez referencje. Działasz w ten sposób na zmiennej zadeklarowanej przed wywołaniem funkcji i zmiana wartości zmiennej w funkcji spowoduje jej zmianę na zewnątrz podprogramu.

void PODPROGRAM(int &A, int &B, int &C, int &D )
{
    // jakieś funkcje podprogramu
    if(warunek)
    {
        // jakieś funkcje
       A = 123;
      B = 321;
    }
    else
    {
        // jakieś funkcje
       C = 456;
       D = 645;
    }
}

W podobny sposób co powyżej możesz opakować zmienne do struktury lub klasy. I przekazać referencje do tej strukturę/klasę jako argument do funkcji, lub zwrócić do niej wskaźnik jak w pierwszym przypadku do tablicy.

Jeszcze innym rozwiązaniem jest użycie krotki i funkcja w uproszczeniu będzie wyglądała mniej więcej tak:

std::tuple<int, int, int, int> podprogram()
{
    int A, B, C, D;
   //Twoje działania na A,B,C,D

    return std::tuple<int, int, int, int>(A,B,C,D);
}

 

O ile alokowanie pamięci wewnątrz podprogramu dla tablicy, klasy, struktury i zwracanie wskaźnika jest raczej słabym rozwiązaniem i nie polecam, bo łatwo zapomnieć tą pamięć później zwolnić, o tyle przekazanie referencji lub krotka raczej nie powinny być takim złym pomysłem, w zależności od Twoich potrzeb.

1
komentarz 5 września 2018 przez RafalS VIP (122,820 p.)
Zależnie od sytuacji czasem warto też zdefiniować strukturke result z danymi i zwracać ją zamiast tablicy czy krotki, które nie mówią nic o danych, które przechowują, w przeciwieństwie do struktury.
0 głosów
odpowiedź 8 listopada 2018 przez Mick_SQ6IYV Obywatel (1,020 p.)
Dziękuję wszystkim bardzo za odpowiedzi:)

Podobne pytania

0 głosów
2 odpowiedzi 2,751 wizyt
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 19 maja 2020 w C i C++ przez kasia98 Nowicjusz (220 p.)
+2 głosów
1 odpowiedź 663 wizyt

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,903 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...