Sınıf ve Yapı


12

C ++ ve diğer etkilenen dillerde Yapı ( struct) adında bir yapı , diğeri ise class. Her ikisi de işlevleri ve değişkenleri tutabilir. Bazı farklılıklar:

  1. Sınıf yığın bellek ve yığın structbellek verilir (açıklama: bu C ++ için yanlış, ama belki OP "etkilenen diller" olarak adlandırılan doğrudur)
  2. Sınıf değişkeni varsayılan olarak özeldir ve structherkese açıktır

Sorum şu: structSınıf için bir şekilde terk edildi mi? Öyleyse neden? Yukarıdaki farklılıklar dışında a struct, bir sınıfın yaptığı ile aynı şeyleri yapabilir. Öyleyse neden terk ettiniz?


vazgeçmek, neden birinin diğerinin üzerinde kullanıldığını kastediyorum.
prometheuspk

sorunuz buna cevap veriyor sanırım.
Umair A.30

3
Sınıflar ve yapılar arasındaki fark dile bağlıdır. C ++ 'dan alınan bazı dersler C # için geçerli değildir.
Meslek

6
Uhhhh. C ++ 'da yığın veya yığındaki nesneleri ayırabilirsiniz. Nereye istersen.
jojo

8
Yanlış, yanlış, yanlış. Yığın ve yığın arasındaki farkın hiçbir önemi yoktur .
Aaronaught

Yanıtlar:


11

Hiç terk edilmedi. Aslında, C # gibi ağır dillerden yararlanan modern diller bile classsize hala sunmaktadır struct. Birini diğerinden seçmek yararlı olduğunda, sizi bu makaleye yönlendiriyorum:

Sınıflar ve Yapılar Arasında Seçim Yapma

MSDN makalesinden alıntı:

Tür örnekleri küçük ve genellikle kısa ömürlü ise veya genellikle diğer nesnelere gömülmüşse, sınıf yerine bir yapı tanımlamayı düşünün.

Tür aşağıdaki özelliklerin hepsine sahip olmadığı sürece bir yapı tanımlamayın:

  • Mantıksal olarak ilkel tiplere (tamsayı, çift vb.) Benzer tek bir değeri temsil eder.
  • 16 bayttan küçük bir örnek boyutuna sahiptir.
  • Değişmez.
  • Sık sık kutsanması gerekmeyecek.

4
Net / C # struct / class anlamı C ++ birinden farklı olduğu için bu cevap gerçekten yanlış yönlendirilmiştir: aynı adı kullanırlar ancak dile bağlı olarak farklı semantikleri vardır !!! C ++ 'da yapı ve sınıf arasında neredeyse hiçbir fark yoktur ve soru ilk noktada tamamen yanlıştır, ki bu c # ve D'de doğrudur ancak c ++' da değildir. Bu nedenle, .Net ile ilgili olan bu makalenin bağlantısı gerçekten çok yanlış. C ++ değil!
Klaim

@Klaim teknik olarak C # için doğru değil (yapılar öbek üzerinde olabilir) C # 'daki önemli ayrım, değer semantiği ve referans semantiği arasında, C ++' nın herhangi bir şey için değerlere veya referanslara sahip olabileceğinden farklı olması gereken bir ayrımdır
jk.

17

C ++ hakkında yanılıyorsunuz: sınıf ve yapı arasındaki tek önemli fark, varsayılan erişim belirteci farkıdır. Yapı ve sınıf tüm niyetler ve amaçlar eşanlamlıları içindir, bence yapı C'ye geriye dönük uyumluluk için tutulur.


7
Sadece değil. Bir nesneyi bir grup veriye dökmek ve ona herhangi bir davranış eklemek istemiyorsanız, Struct iyi bir seçimdir.
quant_dev

2
@quant: Bir yapı kullanmak korkunç bir neden. Umarım bu yorum yanak dilidir.
Aaronaught

1
@Aaronaught Neden?
Yapının

1
@Aaronaught O zaman birden fazla değeri nasıl döndürürsünüz? Diyelim ki, bir deneme modeli temiz fiyat, kirli fiyat ve tahakkuk eden ödemelerin toplamını döndürür.
quant_dev

1
@quant_dev - amaçlarınız için bir yapıya bazı meta-anlamlar eklemeye karar verebilirsiniz (ve eski C programcıları için gerçekten çok anlamlı olan), ancak bu yapı ile arasındaki tek farkın C ++ içindeki sınıf anahtar sözcükleri varsayılan erişimdir.
Joris Timmermans

2

D dili sınıf ve yapı arasında daha büyük bir ayrım yarattı

d'deki bir yapı, değere göre iletilen bazı işlevlere sahip bir yığın tahsisli veri kaydından başka bir şey değildir ( bir numaralandırma + sendika kurulumu kullanmamanız, yani polimorfizmi kendiniz uygulamanız dışında kalıtım için bir seçenek yoktur )

bir sınıf, alıştığımız gibidir: sanal işlevler, yığın ayırma, (tek) kalıtım, ref

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.