Kilka pytań - przekazywanie do funkcji, enum, typy

0

Czytałem sobie rozdział o funkcjach w "Język C++, szkoła programowania". Jest tam przekazywanie w parametrze tablicy. Wszystko jest dla mnie jasne oprócz jednej rzeczy. Mianowicie tablica zawsze jest przesyłana tak

int fun(int tab[],int n)

Czyli nigdy przez wartość zawsze przez parametr. Wiemy, że jeśli chce operować na kopiach w przypadku zmiennych to przekazuje przez wartość do funkcji, a jak chce by wartości się "zmieniły" to przez referencje, albo przez wskaźniki. Jak to jest z tablicami? Bo nie mogę tego jakoś wyczaić. Wiem, że nie powinno się ich "kopiować" bo to za dużo czasu trwa, ale czy jest taka możliwość? Proszę o odp tylko na pytanie.

Kolejne pytanie, teraz mi sie przypomniało. W jakimś zadaniu widziałem dwie funkcje które robiły tylko 'n++', z tą różnicą, że jedna przekazywała to n przez wartość, a druga przez referencje. Obie były funkcjami void, a przecież musielismy zwrócić to n. Jak to jest z tymi funkcjami, bo ja już nie wiem, czy np. przy funkcji

int add(int x, int y)

też muszę dawać int, czy void? Jak rozpoznać?

Jak to jest z "enum", wiem, że można użyć do np. miesięcy, ale są jakieś inne przypadki? Macie może jakiś przykład?

0

tablica jest przekazywana przez "wskaznik"
to drugie pytanie dziwne, ze co zwrocic ze co zwiekszyc ? wtf? jak przekazujesz przez referencje to pracujesz na AKTUALNYM obiekcie

np w grach mozesz meic enum do poruszania sie w gore w dol w lewo w prawo.

0
int fun(int tab[],int n) 

int tab[] jest równoznaczne w tym kontekście z int* tab. Tablice odziedziczone z C mają tę wadę, że przy najmniejszym pretekście zamieniają się we wskaźnik na pierwszy element. Możesz przekazać taką tablicę przez referencję, ale jedynym plusem będzie tutaj sprawdzenie wielkości. Syntax:

int fun(int (&tab)[5], int n)

Jeśli możesz, używaj wszędzie std::array zamiast wbudowanych tablic, zachowują się one znacznie bardziej przewidywalnie i mają w/g mnie czytelniejszą składnię.

ner napisał(a):

Jak to jest z tymi funkcjami, bo ja już nie wiem, czy np. przy funkcji

int add(int x, int y) 

też muszę dawać int, czy void? Jak rozpoznać?

Musisz sobie odpowiedzieć na jedno proste pytanie: czy to funkcja w pojęciu matematycznym, czy procedura kilku kroków do wykonania? add sugeruje dodawanie, więc powinno coś zwrócić. Natomiast wlaczReaktor już może nie zwrócić nic (void) lub po prostu powodzenie wykonania operacji (bool lub jakiś enum z obecnym stanem reaktora).

ner napisał(a):

Jak to jest z "enum", wiem, że można użyć do np. miesięcy, ale są jakieś inne przypadki? Macie może jakiś przykład?
W np. snake'u kolor poruszania się węża. Akcja do wykonania pod wybranym przyciskiem. Wartość błędu zwróconego przez API (zamiast 404 - HTTPResult::NotFound).

0

@kq Jeśli możesz stosować

std:array

tzn. normalnie w pracy się stosuje zwykłe tablice, czy się od tego odchodzi i daje te kontenery?

Czyli to zwracanie to się robi na czuja? Nie ma jakoś określonych przykazań?

W snake, ok, ale tzn. ze o teraz w

switch 

mogę zamiast case 1:

 itd. dawać <code class="cpp">case gora: 

itd ?

0
ner napisał(a):

@kq Jeśli możesz stosować

std:array

tzn. normalnie w pracy się stosuje zwykłe tablice, czy się od tego odchodzi i daje te kontenery?
Jeśli możesz stosować w projekcie C++11 lub 14 to zdecydowanie tak.

ner napisał(a):

Czyli to zwracanie to się robi na czuja? Nie ma jakoś określonych przykazań?
Pewnie można by stworzyć mądrze brzmiący zestaw reguł, ale na czuja w większości przypadków będzie dobrze.

ner napisał(a):

W snake, ok, ale tzn. ze o teraz w

switch 

mogę zamiast case 1:

 itd. dawać <code class="cpp">case gora: 

itd ?
Dokładnie tak. Chociaż enum class wymaga także podania nazwy enuma, ponieważ nie zaśmieca on globalnej przestrzeni nazw, więc to by było

case Kierunek::gora:

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