Yapı ve Birlik Arasındaki Fark
İç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.
- Karşılaştırma Tablosu
- Tanım
- Anahtar Farklılıklar
- benzerlikler
- Sonuç
Karşılaştırma Tablosu
Karşılaştırma Temelleri | yapı | Birlik |
---|---|---|
Temel | Ayrı bellek konumu yapının her üyesine tahsis edilmiştir. | Sendikanın bütün üyeleri aynı hafıza yerini paylaşıyor. |
deklarasyon | struct 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 kelime | yapı | Birlik |
Boyut | Yapı Boyutu = tüm veri üyelerinin boyutunun toplamı. | Birliğin Büyüklüğü = en büyük üyelerin büyüklüğü. |
Mağaza Değeri | Tüm üyeler için farklı değerler depolar. | Tüm üyeler için aynı değeri depolar. |
Zamanında | Bir 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 Yolu | Her 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 özellik | Anonim ö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 < 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. 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.
benzerlikler:
Sonuç: