ďťż

Ładny brzuch

W poniższym kodzie(Jesse Liberty, C++ Dla każdego):

// Listing 13.7 - Tablica utworzona na stercie #include <iostream> class CAT { public: CAT() { itsAge = 1; itsWeight=5; } ~CAT(); int GetAge() const { return itsAge; } int GetWeight() const { return itsWeight; } void SetAge(int age) { itsAge = age; } private: int itsAge; int itsWeight; }; CAT :: ~CAT() { // cout << "Wywolano destruktor!\n"; } int main() { CAT * Family = new CAT[500]; int i; for (i = 0; i < 500; i++) {  Family[i].SetAge(2*i +1); } for (i = 0; i < 500; i++) {  std::cout << "Kot nr " << i+1 << ": ";  std::cout << Family[i].GetAge() << std::endl; } delete [] Family; return 0; }

nie rozumiem dlaczego piszemy, np. Family[i].GetAge() zamiast Family[i]->GetAge() albo Family[i].SetAge(2*i+1) zamiast Family[i]->SetAge(2*i+1). Przecież są to wskaźniki, a jak mi wiadomo to operator wskażnika do obiektu to ->. Proszę o wytłumaczenie mi tej dziwnej konstrukcji.



bo gdy tworzymy obiekt przez wskaźnik:
COS lala = new COS;
To jest zlokalizowany w innmy obszarze pamięci i żeby dostać się do niego, trzeba dostać się do samego obiektu, są na to dwa sposoby:
(*lala).boo(); lub lala->boo();
Z kolei wskaźnik tablicy wskazuje na pierwszy obiekta, a nie na wskaźnik. Dlatego się pisze:
lala[0].boo();
bo przez operator index'u dostajemy się do obiektu bezpośrednio, czyli trzeba zastosować "." a nie "->" .


W poniższym kodzie(Jesse Liberty, C++ Dla każdego):

// Listing 13.7 - Tablica utworzona na stercie #include <iostream> class CAT { public: CAT() { itsAge = 1; itsWeight=5; } ~CAT(); int GetAge() const { return itsAge; } int GetWeight() const { return itsWeight; } void SetAge(int age) { itsAge = age; } private: int itsAge; int itsWeight; }; CAT :: ~CAT() { // cout << "Wywolano destruktor!\n"; } int main() { CAT * Family = new CAT[500]; int i; for (i = 0; i < 500; i++) {  Family[i].SetAge(2*i +1); } for (i = 0; i < 500; i++) {  std::cout << "Kot nr " << i+1 << ": ";  std::cout << Family[i].GetAge() << std::endl; } delete [] Family; return 0; }

nie rozumiem dlaczego piszemy, np. Family[i].GetAge() zamiast Family[i]->GetAge() albo Family[i].SetAge(2*i+1) zamiast Family[i]->SetAge(2*i+1). Przecież są to wskaźniki, a jak mi wiadomo to operator wskażnika do obiektu to ->. Proszę o wytłumaczenie mi tej dziwnej konstrukcji.


bo gdy tworzymy obiekt przez wskaźnik:
lala[0].boo();
bo przez operator index'u dostajemy się do obiektu bezpośrednio, czyli trzeba zastosować "." a nie "->" .

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •