• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica w klasie i adresy.

Object Storage Arubacloud
0 głosów
162 wizyt
pytanie zadane 4 marca 2020 w C i C++ przez kolijk Użytkownik (600 p.)

Witam, Dlaczego w pierwszy sposób otrzymuje ten sam adres, a w drugim przykładzie każdy inny?

 

Przykład 1:

#include <iostream>

class Chicken {};

class Animal {

	Chicken chicken[4];

public:

	Chicken getChick(int nr) { return chicken[nr]; }


};

int main() {

	Animal animal;

	for (int x = 0; x < 4; x++) {
		std::cout <<&animal.getChick(x)<<std::endl;
	}


	return 0;

}

Przykład 2:

#include <iostream>

class Chicken {};

class Animal {


public:

	Chicken chicken[4];


};

int main() {

	Animal animal;

	for (int x = 0; x < 4; x++) {
		std::cout <<&animal.chicken[x]<<std::endl;
	}


	return 0;

}

 

komentarz 4 marca 2020 przez grineee Bywalec (2,270 p.)
ja to początkujący jestem, więc na odpowiedź się nawet nie trudzę, ale tak luźnym podejściem może to ma coś wspólnego z tzw. wskaźnikiem funkcyjnym? (pewnie sam nie do końca wiem o czym mówię, ale lepsze to niż nic ;p)
komentarz 4 marca 2020 przez adrian17 Ekspert (346,320 p.)

z tzw. wskaźnikiem funkcyjnym?

nie, nie ma ;)

komentarz 4 marca 2020 przez grineee Bywalec (2,270 p.)

wierzę na słowo laugh

a możesz wyjaśnić czemu tak jest?  też mnie zaciekawiło ;D

komentarz 4 marca 2020 przez adrian17 Ekspert (346,320 p.)
(patrz odpowiedź niżej)

1 odpowiedź

+3 głosów
odpowiedź 4 marca 2020 przez adrian17 Ekspert (346,320 p.)
wybrane 5 marca 2020 przez kolijk
 
Najlepsza
Chicken getChick(int nr) { return chicken[nr]; }

Ta funkcja zwraca Chicken jako wartość - czyli `return chicken[nr]` kopiuje N-ty element tablicy i zwraca tą kopię. Tak więc linia `&animal.getChick(x)` daje Ci adres kopii, a nie zawartości klasy.

Jeśli chcesz zwrócić referencję do pola klasy, bez kopiowania, zwróć... referencję ;)

(w Twoim drugim kodzie jest oczywiście intuicyjnie - wypisujesz po kolei adres każdego elementu tablicy.)

Podobne pytania

0 głosów
1 odpowiedź 142 wizyt
0 głosów
0 odpowiedzi 356 wizyt
pytanie zadane 11 października 2018 w C i C++ przez Aguli Nowicjusz (190 p.)
+1 głos
1 odpowiedź 337 wizyt
pytanie zadane 18 czerwca 2018 w C i C++ przez Huberti Gaduła (4,500 p.)

92,698 zapytań

141,613 odpowiedzi

320,139 komentarzy

62,057 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...