Przesyłanie argumentu do funkcji składowej, zaprzyjaźnionej - czy też przez wartość ?

0

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 ?

4

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.

0

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.

1

Jak sobie przekażesz, tak będziesz miał. Nie ma znaczenia, czy to funkcje globalne, składowe, zaprzyjaźnione czy jakiekolwiek inne.

0

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.

0

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.

0

@nowicjusz35

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 thisa, 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ł.

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