SORU
13 Kasım 2013, ÇARŞAMBA


C türetilmiş sınıf boyutunu arttırmak için're izin verilen temel sınıf göre yeni bir üye değişken mi?

Bazı üye değişkenleri ve sanal fonksiyonlar sınıf: bir tabanı var sanırım

class Base {
   int member;
};

Base Sanal olmayan bir şekilde türetilmiş ve yeni üye değişkenleri tekrar sanal fonksiyonları: sahip türetilmiş bir sınıf

class Derived : Base {
};

Açıkçası sizeof(Derived) sizeof(Base) daha küçük olamaz.

sizeof(Derived) sizeof(Base) eşit olması gereklidir?

CEVAP
13 Kasım 2013, ÇARŞAMBA


5.3.2 [ifade.boyutu]

Bir sınıfa uygulandığında, sonuç [sizeof] herhangi bir doldurma, bir dizi bu tür nesneleri yerleştirmek için gerekli dahil olmak üzere bu sınıfın bir nesne bayt sayısıdır. En türetilmiş bir sınıf boyutu sıfır (1.8) daha büyük olacak.

1.8 [intro.nesne]

Bir bit alanı (9.6) olduğu sürece, en türetilmiş bir nesne sıfır olmayan bir büyüklüğe sahip olacak ve depolama bir veya daha fazla bayt işgal eder. Temel sınıf alt nesneleri boyutu sıfır olabilir. POD türde bir nesne (3.9) depolama bitişik bayt işgal eder.

ve bir not:

Temel sınıf bir sınıfın gerçek boyutu bu sınıfın bir boyutu için uygulanması sonucu daha az, temel sınıf subobjects sanal temel sınıflar ve daha az katı dolgu gereksinimleri nedeniyle olabilir.

Bunları bir araya getirip, kendine uygun olanı garanti sizeof size söyler ne olursa olsun, sonuç sıfırdan büyük olacak daha var bence. Hatta sizeof(Derived) >= sizeof(Base) garanti etmiyor!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LIVESTRONG.COM

    LIVESTRONG.C

    5 EKİM 2005
  • Nick Pitera

    Nick Pitera

    8 NİSAN 2006
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009