Też miałem kiedyś problem ze zrozumieniem tej różnicy między funkcjami a procedurami, więc spróbuję napisać, jak w końcu to zrozumiałem.
Zarówno procedura jak i funkcja mogą przyjmować różne parametry w nagłówku, więc tym się nie sugeruj. W obu też możemy tworzyć zmienne (lokalne, niedostępne poza klamrami). Różnica jest taka, że jak już napisano, funkcja zwraca wartość (czyli na końcu ma "return cośtam", gdzie "cośtam" musi być typu takiego, jak funkcja, np int). Procedura nie zwraca wartości, a jedynie wykonuje różne rzeczy. Procedury i funkcje różnia się zarówno w budowie, jak i w tym, jak je wywołujesz. W praktyce to wyobraź sobie procedurę i funkcję, które sumują 2 liczby.
Różnica w budowie:
Kopiuj
void proceduraSumuj(int a, int b)
{
cout << "Suma wynosi " << a + b;
}
Kopiuj
int funkcjaSumuj(int a, int b)
{
return a + b;
}
Różnica w wywołaniu:
procedurę void możesz sobie od tak napisać w kodzie:
Kopiuj
int main()
{
proceduraSumuj(2,2);
return 0;
}
Natomiast gdybyś tak samo wywołał tę funkcję, to w praktyce tak, jakbyś napisał:
Kopiuj
int main()
{
4;
return 0;
}
Czyli bez sensu, nie?
Dlatego funkcje przypisujesz do zmiennej albo wrzucasz do couta:
Kopiuj
int main()
{
int mojaSuma;
mojaSuma = funkcjaSumuj(2,2);
cout << "Suma wynosi: " << funkcjaSumuj(2,2);
return 0;
}