sckz
01/06/2005, 21:38
bugün oturup garip sınıfların sizeof ile boyutunu watch tan takip edeyim dedim..
karşılaştığım olaylardan bir kaç kafama takılan soruyu derledim :
1)
class Bos
{};
sizeof(Bos) un değeri 1 miş... Bu sınıfın içinde 1 byte kaplayan ne varki... hadi diyelim kurucu, bozucu falan var.. neyin kurucusu, bozucusu varki...
2)
class Base
{
public :
void show()
{cout << "Base";}
};
class Derived : public Base
{
public :
void show()
{cout << "Derived";}
};
int main()
{
size_t base = sizeof(Base);
size_t derived = sizeof(Derived);
return 0;
}
burda base in de derived in de değeri 1 byte. ama Base içindeki show() fonksiyonunu virtual yaptığımda her ikisinin değeri 4 oluyo..
3)
class Base
{
};
class Derived : virtual public Base
{
public :
double var;
};
int main()
{
size_t base = sizeof(Base);
size_t derived = sizeof(Derived);
return 0;
}
bunun sonucu ise base 1, derived 16... public in başındaki virtual i çıkardığımda sonuç yaklaşık olarak beklediğim gibi (yani base in 1 olması dışında).. ama virtual i koyduğumda neden sınıfın boyutu iki katına çıkıyo... -> aslında Derived sınıfı tam olarak iki katına çıkmıyo... yani Base içine int armut diye bi değişken koyduğumda, derived in değeri 24 değil (yani iki katı değil), 20 oluyo... yani sadece Derived sınıfının boyutu artıyo...
4) bu soru da günlerdir kafama takılıyo... quentin neden euler oldu ?
karşılaştığım olaylardan bir kaç kafama takılan soruyu derledim :
1)
class Bos
{};
sizeof(Bos) un değeri 1 miş... Bu sınıfın içinde 1 byte kaplayan ne varki... hadi diyelim kurucu, bozucu falan var.. neyin kurucusu, bozucusu varki...
2)
class Base
{
public :
void show()
{cout << "Base";}
};
class Derived : public Base
{
public :
void show()
{cout << "Derived";}
};
int main()
{
size_t base = sizeof(Base);
size_t derived = sizeof(Derived);
return 0;
}
burda base in de derived in de değeri 1 byte. ama Base içindeki show() fonksiyonunu virtual yaptığımda her ikisinin değeri 4 oluyo..
3)
class Base
{
};
class Derived : virtual public Base
{
public :
double var;
};
int main()
{
size_t base = sizeof(Base);
size_t derived = sizeof(Derived);
return 0;
}
bunun sonucu ise base 1, derived 16... public in başındaki virtual i çıkardığımda sonuç yaklaşık olarak beklediğim gibi (yani base in 1 olması dışında).. ama virtual i koyduğumda neden sınıfın boyutu iki katına çıkıyo... -> aslında Derived sınıfı tam olarak iki katına çıkmıyo... yani Base içine int armut diye bi değişken koyduğumda, derived in değeri 24 değil (yani iki katı değil), 20 oluyo... yani sadece Derived sınıfının boyutu artıyo...
4) bu soru da günlerdir kafama takılıyo... quentin neden euler oldu ?