Tablica z obiektami klasy.

0

Hej! Napisałem coś takiego(kod niżej) i gdy kompiluje ten program wydaje mi się, że podaje mi zły rozmiar elementu tablicy.
Jestem w pracy i korzystam z kompilatora online, dokładnie tego http://www.compileonline.com/compile_cpp11_online.php
wydaje mi się, że powinienem dostać wartość min 12, a nie 8 jak mi zwraca.

#include <iostream>
using namespace std;

class OBIEKTY
{
    public:
    int b;
    int c;
    int d;
    OBIEKTY(int a,int a1,int a2){b=a;c=a1;d=a2;}
    void Wyswietl(){cout<<b<<" "<<c<<" "<<d<<endl;}
};

int main()
{
   OBIEKTY *TAB[20];
   for(int i=0;i<20;i++)
   {
   TAB[i]=new OBIEKTY(rand()%20,rand()%20,rand()%20);
   }
   
   for(int i=0;i<20;i++)
   {
   TAB[i]->Wyswietl();
   }
   
   for(int i=0;i<20;i++)
   {
   cout<<sizeof(TAB[i])<<" "<<sizeof(TAB+i)<<endl;
   }
   return 0;
}
 
2

Dobrze pokazuje. Wyswietlasz rozmiar wskaznika, a nie tablicy.

1

o_O Ale przeciez ty wyświetlasz rozmiar wskaźników a nie obiektów. Wskaźniki będą miały 4 albo 8 bajtów w zalezności od architektury.

0

Ok, to by wyjaśniało wszystko. Jak w takim razie wyświetlić rozmiar obiektu umieszczonego w tablicy?

1
class OBIEKTY

nie nazywaj liczbą mnogą klasy, która reprezentuje jeden obiekt.

Jak w takim razie wyświetlić rozmiar obiektu umieszczonego w tablicy?

Skoro TAB[0] jest wskaźnikiem, to obiektem jest *TAB[0].

0

@MonkiKong nie będzie. Użyj <vector> albo <list> albo <map> albo innego kontenera który wyda sie sensowny.

0
MonkiKong napisał(a):

Hej! Napisałem coś takiego(kod niżej) i gdy kompiluje ten program wydaje mi się, że podaje mi zły rozmiar elementu tablicy.
Jestem w pracy i korzystam z kompilatora online, dokładnie tego http://www.compileonline.com/compile_cpp11_online.php
wydaje mi się, że powinienem dostać wartość min 12, a nie 8 jak mi zwraca.

#include <iostream>
using namespace std;

class OBIEKTY
{
    public:
    int b;
    int c;
    int d;
    OBIEKTY(int a,int a1,int a2){b=a;c=a1;d=a2;}
    void Wyswietl(){cout<<b<<" "<<c<<" "<<d<<endl;}
};

int main()
{
   OBIEKTY *TAB[20];
   for(int i=0;i<20;i++)
   {
   TAB[i]=new OBIEKTY(rand()%20,rand()%20,rand()%20);
   }
   
   for(int i=0;i<20;i++)
   {
   TAB[i]->Wyswietl();
   }
   
   for(int i=0;i<20;i++)
   {
   cout<<sizeof(TAB[i])<<" "<<sizeof(TAB+i)<<endl;
   }
   return 0;
}
 

powinno być przy size off:

cout<<sizeof(*(TAB[i]))<<" "<<sizeof(*(*(TAB+i))))<<endl;

Dlatego że *TAB[20] jest tablicą 20 elementową wskaźników do obiektów typu Obiekt wiec wartość na która wskazujemy to *(TAB[i])
Uzycie w drugim sizeof tab jest wsaznikiem wskazujący na i-ty wskaźnik znajdujacy się w tablicy Tab, który wskazuje na obiekt klasy Obiekt.

Uff
Mam nadzieje ze pomogłem :P

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