2012-06-12 17 views
9

Her zaman sabit boyutlu bir nesne olarak bir yapı düşünmüştüm ve göze çarpan bir derleyici hatası görünse de, bunun genelde iyi uygulamada olup olmadığını merak ediyordum. Yapıyı bir sınıfa dönüştürmek daha tavsiye edilebilir mi yoksa bir yapı da mı aynı şeyi yapar?Bir vektörü bir yapıda depolamak mümkün mü? C++

kodu, insanlar telaşlı olsun sırf:

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

ebeveyn olarak aynı türde bir sınıfın çocuk sahibi ne yapıyorum özü. Ebeveyn öldüğünde, çocuklar da yapar.

+7

A struct, yalnızca "private" yerine "public" varsayılan görünürlüğüne sahip bir sınıftır. –

+2

Bir yapıya contructor/destructor ile üye eklemenin derleyici için de bir kurucu/destructor yattığını unutmayın. POD yapılarını ima eden C stili teknikler işe yaramaz. –

+0

Bir vektörün yapının içinde saklanması, boyutunu değiştirmez. Vektörün öğeleri yığın üzerinde saklanır, böylece vektörün 0 veya 1000 elementi varsa, yapının boyutu aynı kalır. – mfontanini

cevap

15

Bir std::vector belirli bir boyuta sahiptir ve boyutu içeren ya da herhangi bir sınıf şeyin belirli bir boyuta sahiptir. std::vector, değişken boyutlu bir dizi olarak hareket etmek için yığındaki belleği ayırır ve bir işaretçiyi söz konusu belleğe kaydeder. Bir yapı ve bir sınıf arasındaki tek fark, bir yapının varsayılan olarak genel olması ve bir sınıfın varsayılan olarak özel olmasıdır. struct ve class arasında

+0

Teşekkür ederim. Bu kesinlikle, vektörün yalnızca yığıntaki belleğe bir işaretçi olarak hizmet edeceğini anlamış olur. Detaylı cevap için teşekkürler. –

+0

Varsayılan olarak? Varsayılan olarak? – Inverse

7

farklılıklar üye görünürlüğü ile ne ilgisi var: En önemli fark struct 'ın üyeleri varsayılan olarak ortak ve aynı zamanda o struct' ın ​​miras varsayılan olarak herkese olmasıdır; class üyeleri ve class devralma değerleri varsayılan olarak özeldir. Bunun dışında hiçbir fark yoktur: her zaman struct ile kod yazabilir ve bu kod class ile yazılan kodla eşdeğerdir ve bunun tersi de geçerlidir.

İlgili konular