Yapı ve Birlik Arasındaki Fark

Yazar: Laura McKinney
Yaratılış Tarihi: 1 Nisan 2021
Güncelleme Tarihi: 15 Mayıs Ayı 2024
Anonim
Soru Avı | 250 ÖRNEK | Sözcükte Yapı | 1.BÖLÜM | RÜŞTÜ HOCA
Video: Soru Avı | 250 ÖRNEK | Sözcükte Yapı | 1.BÖLÜM | RÜŞTÜ HOCA

İçerik


C ++, C dilinin özel bir veri oluşturmak için sağladığı beş yönteme izin verir. Bu beş yol ‘yapı’, ‘bit alanı’, ‘sendika’, ‘numaralandırma’, ‘typedef’ dir. Aşağıdaki makalede yapı ile birlik arasındaki farkı inceleyeceğiz. Yapı ve birliktelik, her iki tipteki veriyi tutabilen konteyner veri tipleridir. Yapı ve birlikteliği ayıran en büyük fark, yapının her bir üye için ayrı bir hafıza konumuna sahip olmasıdır, oysa bir birlik üyeleri aynı hafıza yerini paylaşmaktadır.

Karşılaştırma tablosu ile birlikte yapı ve birlik arasındaki farkı anlayalım.

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. benzerlikler
  5. Sonuç

Karşılaştırma Tablosu

Karşılaştırma TemelleriyapıBirlik
TemelAyrı bellek konumu yapının her üyesine tahsis edilmiştir.Sendikanın bütün üyeleri aynı hafıza yerini paylaşıyor.
deklarasyonstruct struct_name {
tip element1;
element2 türü;
.
.
} değişken1, değişken2, ...;
sendika kullanıcı adı {
tip element1;
element2 türü;
.
.
} değişken1, değişken2, ...;
anahtar kelimeyapıBirlik
BoyutYapı Boyutu = tüm veri üyelerinin boyutunun toplamı.Birliğin Büyüklüğü = en büyük üyelerin büyüklüğü.
Mağaza DeğeriTüm üyeler için farklı değerler depolar.Tüm üyeler için aynı değeri depolar.
ZamanındaBir yapı, yapının farklı üyelerinin birden fazla değerini depolar.Bir sendika, tüm üyeler için aynı anda tek bir değer depolar.
Görüntüleme YoluHer hafıza konumunu görüntülemek için tek yol sağlayın.Aynı bellek konumunu görüntülemek için birden fazla yol sağlayın.
Anonim özellikAnonim özellik yok.Anonim birlik ilan edilebilir.

Yapının Tanımı

Yapı, ortak bir adla atıfta bulunulan farklı veri tiplerinde değişkenlerin bir koleksiyonudur. Bir yapıdaki değişkenlere “üyeler” denir. Varsayılan olarak, bir yapının tüm üyeleri “genel” dir. Bir yapı bildirdiğinizde, aynı veri üyeleri organizasyonunu ve üye işlevlerini paylaşarak yapı nesneleri oluşturmak için kullanılabilecek bir şablon yaratırsınız. Yapının beyanı daima derleyiciye bir yapının bildirildiğini söyleyen “struct” anahtar kelimesinden önce gelir. Bir örnek alalım.


Bir örnek alalım.

yapı çalışanı {string name; string company_name; yaylı şehir; } Emp1, Emp2;

Burada çalışanların bilgilerini depolamak için bir yapı ilan ediyoruz. Beyanname, bir noktalı virgül ile, yapısal açıklama ise bir deyim, C ++ 'da ise deyim noktalı virgül ile sonlandırılır.

Bir yapıya verilen ad bir “tip” tanımlar (yukarıdaki örnekte yapının adı “çalışan” dır). Bu tiplerin değişkenleri yaratılabilir, yukarıdaki gibi, “emp1” ve “emp2” tipi “çalışan” değişkenini oluşturduk. Yukarıdaki örnekte, bildiriden hemen sonra bir 'yapı' değişkeni yarattık; dönüşümlü olarak, ayrı ayrı oluşturulabilir.

yapısal çalışan emp1, emp2; // anahtar kelime yapısı zorunlu değildir.

Bir yapı değişkeninin üyeleri başlatılabilir veya nokta (.) Operatörü kullanılarak erişilebilir.

emp1.name "Ashok" =;

Bir yapı değişkeninde yer alan bilgiler, aşağıdaki gibi aynı tipteki başka bir yapı değişkenine atanabilir.


emp1.name "Ashok" =; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; Emp2 = emp1; // emp1 üyesinin emp2'ye değer atama. cout <

Burada, 'emp1' 'emp2' 'emp2' yapı değişkenine atadık, 'emp1', üyelerinin tüm değerlerini karşılık gelen "epm2" üyesine kopyalar.

Yapı değişkeninin üyesi işleve iletilebilir.

fonksiyonu (emp1.city);

Tüm yapı değişkeni, hem değere göre çağrılan hem de referansa göre çağrılan yöntemlerle işleve geçirilebilir.

funt (emp1); // değer yöntemi ile çağrı yaparak çağrı fonksiyonu. . . void funct (yapı çalışan emp) {// emp1 üyelerinin değerlerini atar. cout <

Burada, yapı değişkeninin bir üyesinin değerindeki değişiklik, bir değişken değişken çağrısı tarafından değer yöntemiyle iletildiği için, işlevin dışına yansıtmaz. Şimdi aynı şeyi referans yöntemiyle çağrı yaparak yapalım.

funt (ve emp1); // başvuru yöntemiyle çağrı yaparak çağrı fonksiyonu. . . void funct (yapı çalışanı * emp) {// emp1 adresi alınıyor. rak> şehir = "Nur"; // emp1 değişken değişkeni üyesinin (şehir) değerini değiştirin. . }

Burada, yapı değişkeni referans yoluyla iletilir, bu nedenle yapı değişkeni üyelerinin değerindeki değişiklik aynı zamanda fonksiyonun dışını da yansıtır.

srtuct çalışanı * emp; // tür çalışanın yapı imlecini çözme. emp = ve emp1; // emp1 adresini işaretçiye atama. emp-> city // işaretçi emp1 üyesine erişiyor.

Yapıya işaretçi de oluşturulabilir; yapı değişkeninin adresini tutar.

Yapıda, yapı tanımlaması içermediğinde, herhangi bir kullanıcı tanımlı kurucu ya da sanal işlev ya da ana sınıf ya da özel ya da korumalı alan olduğunda topluluğun başlatılmasına izin verilir.

int main () {struct epm3 = {"Anıl", "Teckpix", "Nur"}; } // Çalışanın yapısı yukarıda belirtilenlerin hiçbirini içermediği için mümkün.

Birliğin Tanımı

Birlik, tek bir birlik tipi altında bildirilen iki veya daha fazla farklı değişken tipi tarafından paylaşılan bir hafıza alanıdır. Bir sendika ilan etmek için kullanılan anahtar kelime “sendika” dır. C ++ 'da, bir birleşme hem üye fonksiyonunu hem de değişkenleri içerebilir. Varsayılan olarak, sendikanın tüm üyeleri “kamu” dır. “Birliğin” beyanı yapının ilanına benzer.

birliği u_type {int x, char c; şamandıra f; } u1, u2;

Burada u_type adında bir birlik ilan etmiştik. U_type üyeleri, tamsayı tipinde "x", "c" karakter tipi ve "f" float türündedir. Bir sendika ilanından hemen sonra “u1” ve “u2” türündeki sendika değişkenlerini yarattık. Ayrıca sendika değişkenini bir sendika ilanından ayrı olarak ilan edebiliriz.

int main () {union u_tipi u1, u2; // Anahtar kelime birliği C ++ 'da zorunlu değildir. }

Sendika üyelerine erişim, birlik değişkeninden önce gelen dot (.) Operatörü kullanılarak yapılabilir ve bu değişkenin üyesini takip eder.

u1.x = 10;

Yapılar gibi, toplu başlatma bir sendikada mümkün değildir. Birliğin tüm üyeler için aynı hafıza konumunu paylaştığını bildiğimiz gibi, bir seferde sadece bir değişken başlatılır ve tüm değişken otomatik olarak başlangıç ​​değeriyle güncellenir.

u1.x = 10; cout <

Herhangi bir ‘u1’ üyesinin değerini değiştirmeye çalışırsanız. Diğer üye otomatik olarak bu değere güncellenecektir.

u1.c = 65; cout <

Birliğe tahsis edilen alan, birliğin en büyük üyesinin boyutuna eşittir. ‘Char’a ayrılan bayt 1 bayt,‘ int ’4 bayt ve‘ float ’4 bayt olduğundan en büyük boyut 4 bayttır. Bu nedenle, “u1” ve “u2” ye ayrılan hafıza 4 bayttır.

int main () {int size_1 = sizeof (u1); // 4 int boyut_2 = sizeof (u2); // 4

Birliğin göstericisi, tıpkı yapıdaki gibi yaratılabilir. İşaretçi, birliğin adresini tutar.

birliği u_type * un; un = ve u1; cout <x; // 10

Yapı gibi, birleşme de fonksiyonlara hem yöntemle hem de değerle çağırma ve referansla çağrı yapma yöntemleriyle aktarılabilir.

fonksiyonu (u1); // değer yöntemi ile çağrı yaparak çağrı fonksiyonu. . . void funct (union u_type un) {// u1 üyesinin değerini geri alarak. cout <

Şimdi işlevi, çağrı yöntemiyle çağrı kullanarak arayalım.

fonksiyonu (ve u1); // çağrı yöntemiyle refrence yöntemi ile çağırma işlevi. . . void funct (birliği u_type un) {// u1 adresini alırken. un-> x = 20. }

C ++ 'da Anonim Birlik adı verilen özel bir birlik tipi var ”. Anonim birliğin türü adı olamaz ve bu birliğin hiçbir değişkeni oluşturulamaz. Sadece derleyiciye üye değişkenlerinin aynı yeri paylaşacağını söylemek. İsimsiz bir birliğin değişkeni normal nokta (.) Operatörü olmadan belirtilebilir.

int main () {union {// türünde adsız bir anonim birlik tanımlayın. int x, char c; şamandıra f; }; x = 10; // nokta operatörü cout olan birlik değişkenine başvurdu <

Anonim birlikte hiçbir üye işlevine izin verilmez, özel veya korumalı veriler içeremez ve genel anonim birliğin ‘statik’ olarak belirtilmesi gerekir.

Normal sendika ilanı için hatırlanması gereken noktalar.

  • Birliğin tanımı ayrıca yapıcı ve yıkıcı da içerebilir.
  • Birlik, aynı bellek konumunu görüntülemek için birden fazla yol sağlar.
  • Sendika, herhangi bir türdeki sınıfı devralmaz.
  • Sendika bir temel sınıf olamaz.
  • Birliğin sanal üye işlevi olamaz.
  • Sendika statik bir değişken olamaz.
  1. Yapı, farklı üyeler için farklı hafıza yerleri kullanır. Bu nedenle, farklı değer tüm üyelere tahsis edilebilir. Ancak, sendika aynı hafıza yerini tüm üyelere ayırıyor. Bu nedenle, tüm üyelere tek bir değer tahsis edilebilir.
  2. Yapı, tüm üyeler için farklı bellek konumlarına sahiptir; bu nedenle, bir defada birden fazla değer içerebilir ve birliğin tüm üyeler için aynı bellek konumunu paylaştığını bildiğimiz için, bir seferde tek bir değer depolayabilir.
  3. Genel olarak, yapının toplam büyüklüğü, birliğin toplam büyüklüğünden daha büyüktür, çünkü bir yapının büyüklüğü, tüm yapı elemanlarının büyüklüğünün toplamıdır ve birliğin büyüklüğü, bir üyenin büyüklüğüdür. en büyük tip.
  4. Yapı, her bir yerin tek bir görüntüsünü sağlarken, birlik, tek bir yerin çoklu görüşlerini sağlar.
  5. İsimsiz bir birliği ilan edebilirsiniz ancak isimsiz bir yapı değil.

benzerlikler:

  • Hem yapı hem de sendika kendini beyan etme, değişkenler yaratma ve değişkenlerin üyelerine erişme ile aynı şekildedir.
  • Hem Yapı hem de birleşme, bir fonksiyona hem değere göre çağrılan hem de referansa göre çağrılan yöntemlerle aktarılabilir.
  • Hem Yapı hem de birleşim, konteyner veri türüdür ve üyeleri olarak diğer yapı, birlik, dizi de dahil olmak üzere herhangi bir veri türünün bir nesnesini içerir.

Sonuç:

Hem yapı hem de birleşme, farklı tipte üyeler içeren konteyner veri tipidir. Ancak yapılar, farklı bir hafıza konumundaki tüm üyeler için ayrı bir değer kaydetmemiz gerektiğinde kullanılır. Tip dönüşümü gerektiğinde sendikalar kullanılır.