الفرق بين الهيكل والاتحاد
المحتوى
يسمح C ++ بجميع الطرق الخمس التي توفرها لغة C لإنشاء بيانات مخصصة. هذه الطرق الخمس هي "البنية" ، "حقل البت" ، "الوحدة" ، "التعداد" ، "typedef". في المقالة أدناه ، سنقوم بدراسة الفرق بين الهيكل والاتحاد. الهيكل والاتحاد على حد سواء هي أنواع البيانات الحاوية التي يمكن أن تعقد البيانات من أي "نوع". يتمثل الاختلاف الرئيسي الوحيد الذي يميز البنية والاتحاد في أن للهيكل موقع ذاكرة منفصل لكل عضو من أعضائه ، بينما يتشارك أعضاء الاتحاد في نفس موقع الذاكرة.
دعونا نفهم الفرق بين الهيكل والاتحاد ، إلى جانب مخطط المقارنة.
- رسم بياني للمقارنة
- تعريف
- الاختلافات الرئيسية
- التشابه
- خاتمة
رسم بياني للمقارنة
أساس المقارنة | بناء | اتحاد |
---|---|---|
الأساسي | يتم تخصيص موقع الذاكرة المنفصلة لكل عضو في البنية. | جميع أعضاء الاتحاد تشترك في نفس موقع الذاكرة. |
إعلان | struct struct_name { اكتب element1 ؛ اكتب element2 ؛ . . } variable1، variable2، ...؛ | الاتحاد u_name { اكتب element1 ؛ اكتب element2 ؛ . . } variable1، variable2، ...؛ |
الكلمة | البنية | اتحاد |
بحجم | حجم الهيكل = مجموع حجم جميع أعضاء البيانات. | حجم الاتحاد = حجم أكبر الأعضاء. |
قيمة المتجر | يخزن القيم المتميزة لجميع الأعضاء. | يخزن نفس القيمة لجميع الأعضاء. |
في الوقت | يخزن الهيكل قيم متعددة ، للأعضاء المختلفة ، للهيكل. | يخزن الاتحاد قيمة واحدة في وقت واحد لجميع الأعضاء. |
طريقة العرض | توفير طريقة واحدة لعرض كل موقع الذاكرة. | توفير طريقة متعددة لعرض نفس موقع الذاكرة. |
ميزة مجهولة | لا ميزة مجهولة. | يمكن الإعلان عن اتحاد مجهول. |
تعريف الهيكل
الهيكل عبارة عن مجموعة من متغيرات أنواع البيانات المختلفة ، والتي تتم إحالتها باسم شائع. تسمى المتغيرات في بنية "الأعضاء". بشكل افتراضي ، يكون كل أعضاء الهيكل "عام". عندما تعلن عن بنية ، فإنك تنشئ قالبًا ، يمكن استخدامه لإنشاء كائنات هيكلية ، ومشاركة نفس تنظيم أعضاء البيانات ووظائف الأعضاء. يسبق الإعلان عن الهيكل دائمًا الكلمة الأساسية "struct" ، والتي تخبر المترجم بأنه تم الإعلان عن بنية. لنأخذ مثالا.
لنأخذ مثالا.
هيكل الموظف اسم الشركة مدينة سلسلة } emp1، emp2.
هنا ، نعلن عن هيكل لتخزين معلومات الموظفين. يتم إنهاء الإعلان بواسطة فاصلة منقوطة ، حيث أن إعلان الهيكل عبارة عن بيان ، وفي C ++ يتم إنهاء العبارة بفاصلة منقوطة.
يعرّف الاسم المعطى للهيكل "النوع" (في المثال أعلاه ، اسم الهيكل هو "الموظف"). يمكن إنشاء متغيرات هذه الأنواع ، كما ذكرنا أعلاه ، أنشأنا متغيرين "emp1" و "emp2" من النوع "موظف". في المثال أعلاه ، أنشأنا متغير "بنية" بعد الإعلان مباشرةً ؛ بالتناوب ، يمكن أن تنشأ بشكل منفصل.
هيكل الموظف emp1، emp2؛ // بنية الكلمة الأساسية ليست إلزامية.
يمكن تهيئة أعضاء متغير بنية أو يمكن الوصول إليها باستخدام عامل التشغيل dot (.).
emp1.name = "أشوك".
يمكن تعيين المعلومات الموجودة في متغير بنية إلى متغير بنية آخر من نفس النوع على النحو التالي.
emp1.name = "أشوك". emp1.company_name = "Teckpix"؛ emp1.city = "دلهي". emp2 = emp1. / / تعيين قيم عضو emp1 إلى emp2. cout <
هنا ، قمنا بتعيين متغير الهيكل "emp1" إلى "emp2" ، لذلك ، "emp1" بنسخ كل قيمة أعضائه إلى العضو المقابل في "epm2".
يمكن تمرير عضو متغير الهيكل إلى الوظيفة.
وظي (emp1.city)؛
يمكن تمرير متغير الهيكل بأكمله إلى الوظيفة ، من خلال كل من الأساليب استدعاء حسب القيمة ونداء حسب المرجع.
funt (emp1)؛ // استدعاء وظيفة عن طريق الدعوة من خلال طريقة القيمة. . . وظيفة باطلة (struct employee emp) {// receving قيم أعضاء emp1. cout <
هنا ، لن ينعكس التغيير في قيمة عضو متغير الهيكل خارج الوظيفة حيث يتم تمرير المتغير عن طريق استدعاء حسب القيمة. الآن دعونا نفعل الشيء نفسه عن طريق الاتصال بواسطة الطريقة المرجعية.
funt (& emp1)؛ // استدعاء وظيفة عن طريق الدعوة عن طريق الطريقة المرجعية. . . funct void (struct employee * emp) {// receving address of emp1. emp-> مدينة = "نور". / / قم بتغيير قيمة العضو (المدينة) الخاص بالهيكل المتغير emp1. . }
هنا ، يتم تمرير متغير الهيكل بالرجوع لذلك ، فإن التغيير في قيمة أعضاء متغير الهيكل يعكس أيضًا خارج الوظيفة أيضًا.
موظف srtuct * emp ؛ / / decalring مؤشر بنية نوع الموظف. خطة الإدارة البيئية = & emp1. // تعيين عنوان emp1 إلى المؤشر. emp-> city // pointer للوصول إلى مدينة عضو emp1.
يمكن أيضًا إنشاء مؤشر الهيكل ؛ انها تحمل عنوان متغير الهيكل.
في الهيكل ، يُسمح بالتجميع الكلي عندما لا يحتوي تعريف البنية ، أو أي مُنشئ مُعرَّف من قبل المستخدم أو وظائف افتراضية أو فئة أساسية أو حقل خاص أو محمي.
int main () {struct epm3 = {"Anil"، "Teckpix"، "Nur"}؛ } // ممكن لأن هيكل الموظف لا يحتوي على أي من الأشياء المذكورة أعلاه.
تعريف الاتحاد
الاتحاد هو موقع ذاكرة مشترك بين نوعين مختلفين أو أكثر من المتغيرات المعلنة تحت نوع اتحاد واحد. الكلمة الأساسية المستخدمة للإعلان عن الاتحاد هي "الاتحاد". في C ++ ، قد يحتوي الاتحاد على وظيفة العضو والمتغيرات. افتراضيًا ، يكون جميع أعضاء الاتحاد "عامين". إعلان "الاتحاد" يشبه إعلان الهيكل.
union u_type {int x، char c؛ تعويم و. } u1 ، u2 ؛
هنا ، أعلنا اتحاد يسمى u_type. أعضاء u_type هم 'x' من النوع الصحيح ، و 'c' من نوع الحرف و 'f' من النوع float. لقد أنشأنا أيضًا متغيري الاتحاد "u1" و "u2" ، من نوع "u_type" ، مباشرةً بعد إعلان الاتحاد. يمكننا أيضًا إعلان متغير الاتحاد بشكل منفصل عن إعلان الاتحاد.
int main () {union u_type u1، u2؛ // اتحاد الكلمات الرئيسية ليس إلزاميًا في الإصدار C ++. }
يمكن الوصول إلى أعضاء الاتحاد باستخدام عامل التشغيل dot (.) ، مسبوقًا بمتغير الاتحاد ويتبع عضو ذلك المتغير.
u1.x = 10؛
مثل البنى ، التهيئة الكلية غير ممكنة في الاتحاد. كما نعلم ، يشارك الاتحاد موقع الذاكرة نفسه لجميع أعضائه في وقت يتم تهيئة متغير واحد فقط ويتم تحديث كل المتغير تلقائيًا بالقيمة التي تم تهيئتها.
u1.x = 10؛ cout <
إذا حاولت تغيير قيمة أي عضو في "u1". سيتم تحديث العضو الآخر تلقائيًا بتلك القيمة.
u1.c = 65؛ cout <
المساحة المخصصة للاتحاد مساوية لحجم أكبر عضو في الاتحاد. نظرًا لأن البايت المخصص لـ 'char' هو 1 بايت ، 'int' هو 4 بايت و 'float' هو 4 بايت لذلك ، أكبر حجم هو 4 بايت. لذلك ، الذاكرة المخصصة لـ "u1" و "u2" هي 4 بايت.
int main () {int size_1 = sizeof (u1) ؛ // 4 int size_2 = sizeof (u2) ؛ // 4
يمكن إنشاء مؤشر الاتحاد كما هو الحال في الهيكل. المؤشر يحمل عنوان الاتحاد.
الاتحاد u_type * un ؛ الامم المتحدة = & U1. cout < مثل البنية ، يمكن أيضًا نقل الاتحاد إلى الوظائف من خلال كلتا الطريقتين ، أي الاتصال حسب القيمة والدعوة حسب المرجع. وظي (U1)؛ // استدعاء وظيفة عن طريق الدعوة من خلال طريقة القيمة. . . الدالة الفارغة (اتحاد u_type un) {// receving قيمة العضو u1. cout < الآن ، دعنا ندعو الوظيفة باستخدام طريقة الاتصال حسب المرجع. وظي (و U1)؛ // استدعاء وظيفة عن طريق الدعوة عن طريق طريقة refrence. . . وظيفة باطلة (union u_type un) {// receving عنوان u1. الامم المتحدة> س = 20. } هناك نوع خاص من الاتحاد في C ++ يسمى الاتحاد المجهول ”. لا يمكن أن يكون للاتحاد المجهول اسم النوع ، ولا يمكن إنشاء أي متغير لهذا الاتحاد. إنه فقط لإعلام المترجم أن المتغيرات الخاصة به هي مشاركة نفس الموقع. يمكن الإشارة إلى متغير اتحاد مجهول بدون عامل التشغيل dot (.) العادي. int main () {union {// حدد اتحادًا مجهولًا بدون اسم الكتابة. int x، char c؛ تعويم و. }؛ س = 10؛ // أشار إلى متغير الاتحاد مع cout out out cout < في الاتحاد المجهول ، لا يُسمح بأي وظيفة عضو ، ولا يمكن أن تحتوي على بيانات خاصة أو محمية ، ويجب تحديد الاتحاد العام المجهول كـ "ثابت". النقاط التي يجب تذكرها لإعلان الاتحاد العادي. كلاهما ، التركيب والاتحاد هما نوع بيانات الحاوية الذي يحتوي على عضو من أنواع مختلفة. ولكن يتم استخدام الهياكل عندما نحتاج إلى تخزين قيمة مميزة لجميع الأعضاء في موقع ذاكرة مميز. يتم استخدام النقابات عند الحاجة إلى تحويل النوع.
التشابه:
خاتمة: