2012-06-12 13 views
9

Zawsze myślałem o strukturze jako obiekcie o ustalonym rozmiarze i chociaż nie ma żadnych jaskrawych błędów w kompilatorze, zastanawiałem się, czy jest to ogólnie w dobrej praktyce. Czy zmiana struktury na klasę byłaby bardziej wskazana, czy też struktura może równie dobrze działać?Czy jest możliwe/zalecane przechowywanie wektora w strukturze? C++

kod, tylko dlatego, że ludzie stają się wybredne:

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

Istotą co robie jest posiadanie dzieci klasy jako tego samego rodzaju co rodzic. Kiedy rodzic umiera, dzieci też.

+7

"struct" to po prostu klasa z domyślną widocznością 'public' zamiast' private'. –

+2

Należy zauważyć, że dodawanie członków z contructor/destructor do struct powoduje, że kompilator wysyła również konstruktor/destruktor dla struct. Techniki w stylu C, które implikują struktury POD, nie będą działać. –

+0

Przechowywanie wektora wewnątrz struktury nie powoduje zmiany jego rozmiaru. Elementy wektorowe są przechowywane na stercie, więc rozmiar struktury pozostaje taki sam, bez względu na to, czy wektor ma 0, czy 1000 elementów. – mfontanini

Odpowiedz

15

An std::vector ma określony znany rozmiar, a każda klasa lub struktura, które go zawierają, ma określony znany rozmiar. std::vector przydziela pamięć na stercie, aby działała jako tablica o zmiennej wielkości i zapisuje wskaźnik do wspomnianej pamięci. Jedyna różnica między strukturą a klasą polega na tym, że struktura jest domyślnie publiczna, a klasa jest domyślnie prywatna.

+0

Dziękuję. To zdecydowanie ma sens, że wektor będzie służył jako wskaźnik do pamięci w stercie. Dziękuję za szczegółową odpowiedź. –

+0

Domyślnie? Domyślnie? – Inverse

7

Różnice między struct i class mieć do czynienia z widocznością członkiem: najbardziej zauważalną różnicą jest to, że struct „s członkowie są domyślnie publiczne, a także, że struct” s dziedziczenie jest domyślnie publiczne; class członków i dziedziczenie class są domyślnie prywatne. Poza tym nie ma różnicy: zawsze można napisać kod z numerem struct, który tworzy kod równoważny kodowi napisanemu pod numerem class i na odwrót.

Powiązane problemy