Wróćmy do podstaw.
Jak już pisałem w komentarzu, każda funkcja ma postać
zwracany_typ nazwa_funkcji(argumenty_funkcji)
Typ void oznacza, że funkcja nie zwraca wyniku.
Przykładowe funkcje:
int dodaj(int a, int b) { // funkcja zwraca wartość int
int wynik = a+b;
return wynik // zwracana wartość
}
void dodaj_i zapomnij(int a, int b) { // funkcja nie zwraca wartości
int wynik = a+b;
// funkcja kończy swoje działanie bez zwracania wyniku
// zmienna wynik jest "zapominana", nie ma znaczenia dla programu
}
void wczesniejsze_wyjscie(int a, int b) { // funkcja nie zwraca wartości
if (a == b)
return; // wyjście z funkcji bez zwracania wartości
int wynik = a+b;
// funkcja kończy swoje działanie bez zwracania wyniku
// zmienna wynik jest "zapominana", nie ma znaczenia dla programu
}
Zamiast prostego typu danych funkcja może zwracać klasę lub strukturę.
#include <iostream>
using namespace std;
struct osoba {
string imie;
string nazwisko;
int wiek;
};
osoba utworz_mariana_kowalskiego_18() {
osoba marian = { "Marian", "Kowalski", 18 };
return marian;
}
int main() {
osoba ktos = utworz_mariana_kowalskiego_18();
cout << "Imie: " << ktos.imie << endl;
cout << "Nazwisko: " << ktos.nazwisko << endl;
cout << "Wiek: " << ktos.wiek << endl;
return 0;
}
Zawsze gdy podajesz zmienną jako argument funkcji, tak naprawdę do funkcji przekazywana jest kopia obiektu. Jeżeli twoja struktura jest duża kopiowanie może zająć dużo czasu, a przy niektórych obiektach może być wręcz niemożliwe (usunięty lub prywatny konstruktor kopiujący).
Dlatego zawsze lepiej jest używać referencji do obiektu (a jeszcze lepiej stałej referencji, żeby uniknąć przypadkowej modyfikacji twojego obiektu).
void tu_jest_robiona_kopia(osoba ktos) {
// pracujesz na kopii
// modyfikacja zmiennej ktos nie modyfikuje oryginalnego obiektu
// tylko kopię wewnątrz tej funkcji
}
void tu_jest_przekazywana_referencja(osoba &ktos) {
ktos.imie = "Ktoś inny"; // zmienną ktoś można zmodyfikować
}
void tu_jest_przekazywana_stala_referencja(const osoba &ktos) {
// możesz czytać ze zmiennej ktoś, ale nie możesz jej modyfikować
}