Strona 1 z 1
[C++] Przesyłanie argumentów do i z funkcji
: 11 lip 2013, o 19:57
autor: kam_new93
Siema. Nurtuje mnie jedna rzecz a mianowicie chodzi tu o przesylanie danych do funkcji . Język to c++.
Jako że każdy z programistów c++ mówił mi tzn(profesorowie na uczelni) ze funkcje są po to by z korzystac i <przesyłać do nich lub z nich argumenty> i tu moje pytanie.
Po co ?
Skoro mozna wywolac funkcje bezargumentową i w niej zrobic to co chcemy, postaram sie to zoobrazować co mam na myśli:
Kod: Zaznacz cały
funkcja wg nich(profesorów)
int main()
{
licz(argument1,argument2,...,argumentN);
}
void licz(int argument1,int argument2,...,argumentN)
{
tutaj kod cos wykonuje
}
/************************************
ja zrobie to w taki sposób ;
int main()
{
licz(); //tu nie daje ile ma byc argumnetow tak jak ONI to robili
}
void licz()
{
//tutaj kod cos robi i w nim znajduja sie argumenty ,np. argument1,argument2,...,argumentN;
}
reasumując kod robi dokładnie to samo tylko że oni mówią że tak sie nie programuje to ja sie pytam kogoś mądrego dlaczego , niech mi wytłumaczy ponieważ obie wersje działają i odpowiadają ścisle za daną operacje w programie .
dzieki z góry
p.s. afish tagi już poprawione
[C++] Przesyłanie argumentów do i z funkcji
: 11 lip 2013, o 20:36
autor: MichalPWr
Dlatego, że C++ wykorzystuje coś takiego jak przeciążanie funkcji i pisząc program w ten sposób pozbawiasz się tego.
Oczywiście da się napisać program z funkcjami bez argumentów i operować na konkretnych danych za pomocą this->atrybut.
[C++] Przesyłanie argumentów do i z funkcji
: 11 lip 2013, o 23:09
autor: Ser Cubus
w takim wypadku każda zmienna u Ciebie musi mieć inną nazwę i jakaś funkcja czy cokolwiek może ją przypadkowo zmienić. A można przesyłać arguemnty do funkcji i ten problem znika. Pamiętaj, że nie każdy program ma 10 czy 50 linijek. Jak robisz moduły po tysiące linijek i ktoś inny ma tego używać to czemu ma się martwić czy ktoś czasem nie użył już takiej zmiennej? Inna sprawa masz 3 liczby i funkcję, która dodaje 2 dowolne. Ty byś musiał napisać, aż 3 funkcje robiące dokladnie to samo na innych zmiennych, mi by wysatrczyła jedna, która przyjmuje 2 argumenty
[C++] Przesyłanie argumentów do i z funkcji
: 11 lip 2013, o 23:57
autor: pawel_wr
Zrozumiesz , po co wymyślono funkcje z parametrami // nie zawsze chodzi o przeciążenie ,
gdy będziesz musiał napisać złożony , długi program , np. taki mający 4000 linijek kodu.
Jesteś na etapie pisania żłobka programistycznego typu : wczytaj dwie liczby , a potem
dodaj , wymnóż itp. więc nie masz jeszcze pojęcia o sztuce programowania.
[C++] Przesyłanie argumentów do i z funkcji
: 12 lip 2013, o 01:30
autor: kam_new93
dzieki wielkie zawsze dobrze jak ktoś inny spojrzy na daną sprawe teraz do mnie dotarlo
p.s. szczegolnie tobie panie Serze
[C++] Przesyłanie argumentów do i z funkcji
: 12 lip 2013, o 13:59
autor: steal
Tak jak napisał @pawel_wr, na wyższym poziomie pisania programów natrafia się na problemy, które wymagają wykonywania pewnych funkcji na dużych zbiorach danych i nie sposób napisać oddzielnej funkcji dla każdej danej/ych. Wynika to nie tylko z braku czasu/zasobów pamięci, ale przede wszystkim z tego, że nie znamy z góry tych danych! Przykładowo jeżeli program ma dodawać do siebie dwie liczby, a takich par masz zapisanych w pliku tysiąc, to napiszesz tysiąc funkcji? A skąd będziesz wiedział jakie mają wartości? O to w tym chodzi.
Kod: Zaznacz cały
int main(){
cout << dodaj(5,2);
cout << dodaj(4,2);
//Albo w pętli (jak to zrobić Twoim sposobem?)
for(int i = 0; i < 1000; ++i)
cout << dodaj(i, 2*i) << " ";
}
int dodaj(int a, in b){
return a+b;
}
[C++] Przesyłanie argumentów do i z funkcji
: 13 lip 2013, o 02:13
autor: Gouranga
Generalnie Twój kod z pierwszego posta jest niezgodny z ideą funkcji. Funkcja ma wykonać na argumentach działania i zwrócić wynik, w funkcji zasadniczo w ogóle nie powinieneś niczego wypisywać (zrozumiesz to byćmoże jak ruszysz kiedyś bazy danych i TransactSQL).
Tak więc taki kod:
Kod: Zaznacz cały
void suma(int a, int b){
cout << a+b;
}
int main(void){
suma(2,3);
}
jest błędny, poprawna forma:
Kod: Zaznacz cały
int suma(int a, int b){
return a+b;
}
int main(void){
cout << suma(2,3);
}
Jeśli natomiast chcesz zwracać więcej niż jedną rzecz używaj wskaźników.
[C++] Przesyłanie argumentów do i z funkcji
: 13 lip 2013, o 02:21
autor: MichalPWr
Gouranga, Jest błędny bo? Pomijając inkludy i przestrzeń nazw std.
pawel_wr, Pewnie, że nie zawsze. Podałem to jako przykład, który moim zdaniem najlepiej to obrazuje.
[C++] Przesyłanie argumentów do i z funkcji
: 13 lip 2013, o 02:31
autor: Gouranga
Jest błędny z logicznego punktu widzenia, tworzysz funkcję, która będzie potrafiła tylko wyświetlić sumę liczb, gdybyś chciał tylko je dodać ale zamiast wyświetlania np. tę ich sumę jeszcze do czegoś dodać czy coś to nie masz takiej funkcji. Chodzi o robienie uniwersalnych funkcji, które LICZĄ a nie DRUKUJĄ, od drukowania masz cout/printf i w nich dajesz wywołanie funkcji
[C++] Przesyłanie argumentów do i z funkcji
: 13 lip 2013, o 09:59
autor: Ser Cubus
Gouranga, nie szarżuj z wskaźnikami. Na początek zalecałbym referencję ^^
[C++] Przesyłanie argumentów do i z funkcji
: 13 lip 2013, o 12:45
autor: Gouranga
Nie rozumiem, dlaczego ludzie uważają wskaźniki w C za zło, twór szatana i w ogóle coś niewyuczalnego. Przecież one są proste i mega przydatne.
[C++] Przesyłanie argumentów do i z funkcji
: 13 lip 2013, o 14:57
autor: MichalPWr
Gouranga Te dwa małe programy tego nie obrazują. Oba robią dokładnie to samo;)
A dlaczego wskaźniki uważane są za samo zło? Dlatego, że to z nimi związane są najczęściej wycieki pamięci. Chodzi o to, że należy bardzo uważać kiedy i jak zwalniać wskaźnik. Na szczęście z pomocą przychodzi nam biblioteka Boost ze swoimi inteligentnymi wskaźnikami. Są mega przydatne ale na pewno nie proste