Witam,
wiem, że jeśli mam funkcję globalną wywołaną z argumentem jakiejś klasy to argument jest przesyłany przez wartość.
Czy w przypadku funkcji zaprzyjaźnionych i składowych jest tak samo ?
Witam,
wiem, że jeśli mam funkcję globalną wywołaną z argumentem jakiejś klasy to argument jest przesyłany przez wartość.
Czy w przypadku funkcji zaprzyjaźnionych i składowych jest tak samo ?
wiem, że jeśli mam funkcję globalną wywołaną z argumentem jakiejś klasy to argument jest przesyłany przez wartość.
Jest przekazywany tak, jak jest przekazywany. Niekoniecznie przez wartość.
Czy w przypadku funkcji zaprzyjaźnionych i składowych jest tak samo
To nie ma wpływu na przekazywanie argumentów.
?
Nie stawiamy spacji przed znakiem zapytania.
Jeśli przekazuje tak funkcja(tablica[]) to jest argument przesyłany przez wartość. Jeśli funkcja(&tablica) to przez referencje. I chciałem spytać czy jest tak samo w przypadku funkcji zaprzyjaźnionych i składowych.
Jak sobie przekażesz, tak będziesz miał. Nie ma znaczenia, czy to funkcje globalne, składowe, zaprzyjaźnione czy jakiekolwiek inne.
Tablicę np. w normalnych funkcjach przekazuje się przez wskaźnik. W funkcji, której argumentem jest obiekt jakieś klasy już tak nie jest. I nie wiem czy tak samo jest w funkcjach zaprzyjaźnionych i lokalnych czy tylko tej.
Tablicę np. w normalnych funkcjach przekazuje się przez wskaźnik
Nie, przez wartość. Dokładniej kopiujesz wartość (adres) wskaźnika.
W funkcji, której argumentem jest obiekt jakieś klasy już tak nie jest. I nie wiem czy tak samo jest w funkcjach zaprzyjaźnionych i lokalnych czy tylko tej.
Skoro funkcja oczekuje obiektu i nie może zrobić niejawnej konwersji to absolutnie nic tego nie zmieni. Musisz dostarczyć funkcji to, czego sobie ona życzy.
czyli też przez wartość dla funkcji zaprzyjaźnionej i składowej ? Bo w składowej to jest wskaźnik this i nadal nie wiem jak to jest.
Musisz zrozumieć, że rodzaj
funkcji nie ma żadnego wpływu na to w jaki sposób są przekazywane argumenty.
W składowej funkcji deklarujesz tylko argumenty bez this
a, możesz sobie wyobrazić, że jak masz:
struct Foo {
void Bar(int x, int y);
};
To ta funkcja wygląda tak:
void Bar(Foo* this, int x, int y);
this
jest zawsze wskaźnikiem, a resztę argumentów deklarujesz samemu, więc jak zrobisz tak będziesz miał.