ساخت اور یونین کے مابین فرق

مصنف: Laura McKinney
تخلیق کی تاریخ: 1 اپریل 2021
تازہ کاری کی تاریخ: 6 مئی 2024
Anonim
Основные ошибки при возведении перегородок из газобетона #5
ویڈیو: Основные ошибки при возведении перегородок из газобетона #5

مواد


C ++ ان پانچوں طریقوں کی اجازت دیتا ہے جن کی مدد سے C زبان نے ایک کسٹم ڈیٹا تشکیل دیا۔ وہ پانچ طریقے "ڈھانچہ" ، "بٹ فیلڈ" ، "یونین" ، "گنتی" ، "ٹائپف" ہیں۔ ذیل میں مضمون میں ہم ساخت اور اتحاد کے درمیان فرق کا مطالعہ کرنے جارہے ہیں۔ ڈھانچہ اور یونین دونوں کنٹینر ڈیٹا کی اقسام ہیں جو کسی بھی "قسم" کا ڈیٹا رکھ سکتی ہیں۔ ایک اہم فرق جو ساخت اور اتحاد کو ممتاز کرتا ہے وہ یہ ہے کہ اس ڈھانچے میں اپنے ہر ممبر کے لئے الگ الگ میموری کی جگہ ہوتی ہے جبکہ یونین کے ممبران اسی میموری کی جگہ پر مشترک ہوتے ہیں۔

آئیے ایک موازنہ چارٹ کے ساتھ ساتھ ساخت اور اتحاد کے درمیان فرق کو بھی سمجھیں۔

  1. موازنہ چارٹ
  2. تعریف
  3. کلیدی اختلافات
  4. مماثلت
  5. نتیجہ اخذ کرنا

موازنہ چارٹ

موازنہ کی بنیادساختیونین
بنیادیڈھانچے کے ہر ممبر کو میموری کا الگ مقام الاٹ کیا جاتا ہے۔یونین کے تمام ممبران ایک جیسے میموری والے مقام پر اشتراک کرتے ہیں۔
اعلامیہstruct ڈھانچے کا نام {
قسم 1؛
قسم عنصر 2؛
.
.
} متغیر 1 ، متغیر 2 ، ...؛
یونین u_name {
قسم 1؛
قسم عنصر 2؛
.
.
} متغیر 1 ، متغیر 2 ، ...؛
مطلوبہ الفاظڈھانچہاتحاد
سائزساخت کا سائز = تمام اعداد و شمار کے ممبروں کے سائز کا مجموعہ۔یونین کا سائز = سب سے بڑے ممبروں کا سائز۔
اسٹور ویلیوتمام ممبروں کے لئے الگ الگ اقدار کو اسٹور کرتا ہے۔تمام ممبروں کے لئے یکساں قیمت رکھنا۔
ایک وقت میںایک ڈھانچے میں ساخت کے متعدد اقدار ، مختلف ممبران کا ذخیرہ ہوتا ہے۔ایک یونین تمام ممبروں کے لئے ایک وقت میں ایک ہی قیمت کو اسٹور کرتی ہے۔
دیکھنے کا طریقہمیموری کے ہر مقام کو دیکھنے کا واحد طریقہ فراہم کریں۔اسی میموری والے مقام کو دیکھنے کے ل multiple متعدد راستہ فراہم کریں۔
گمنام خصوصیتکوئی گمنام خصوصیت نہیں ہے۔گمنام یونین کا اعلان کیا جاسکتا ہے۔

ساخت کی تعریف

ڈھانچہ مختلف اعداد و شمار کی اقسام کے متغیرات کا ایک مجموعہ ہے ، جو ایک عام نام کے ذریعہ حوالہ دیا جاتا ہے۔ کسی ڈھانچے میں متغیر کو "ممبر" کہا جاتا ہے۔ پہلے سے طے شدہ طور پر ، کسی ڈھانچے کے تمام ممبر "عوامی" ہوتے ہیں۔ جب آپ کسی ڈھانچے کا اعلان کرتے ہیں تو ، آپ ایک ٹیمپلیٹ تیار کرتے ہیں ، جس کا استعمال ڈھانچے کی اشیاء کو بنانے کے لئے کیا جاسکتا ہے ، جس میں ڈیٹا ممبروں اور ممبر افعال کی ایک ہی تنظیم کا اشتراک کیا جاتا ہے۔ اس ڈھانچے کا اعلان ہمیشہ اس سے پہلے "ڈھانچے" کے لفظ سے ہوتا ہے ، جو مرتب کو بتاتا ہے کہ ڈھانچے کا اعلان کیا گیا ہے۔ آئیے ایک مثال لیتے ہیں۔


آئیے ایک مثال لیتے ہیں۔

ڈھانچہ ملازم {تار نام؛ سٹرنگ کمپنی_ کا نام؛ تار شہر؛ } ایمپ 1 ، ایمپ 2؛

یہاں ، ہم ملازمین کی معلومات کو محفوظ کرنے کے لئے ڈھانچے کا اعلان کرتے ہیں۔ اعلامیہ سیمیکلن کے ذریعہ ختم کیا جاتا ہے ، کیونکہ ڈھانچہ اعلامیہ ایک بیان ہوتا ہے اور ، C ++ میں بیان سیمیکون کے ذریعہ ختم ہوتا ہے۔

کسی ڈھانچے کو دیا ہوا نام ایک "قسم" کی وضاحت کرتا ہے (مذکورہ بالا ساخت کے نام کا نام "ملازم" ہے)۔ ان اقسام کے متغیرات کو تخلیق کیا جاسکتا ہے ، جیسا کہ اوپر ، ہم نے دو متغیر ’ایمپ 1‘ اور ’ایمپ 2‘ قسم کی "ملازم" تشکیل دی۔ مذکورہ بالا مثال میں ، ہم نے اعلان کے فورا؛ بعد ہی ایک ’ڈھانچہ‘ متغیر بنایا۔ باری باری ، یہ الگ سے تخلیق کیا جاسکتا ہے۔

ڈھانچہ ملازم ایمپ 1، ایمپ 2؛ // مطلوبہ الفاظ کا ڈھانچہ لازمی نہیں ہے۔

ڈھانچے متغیر کے ممبروں کو ابتدائی شکل دی جاسکتی ہے یا ڈاٹ (.) آپریٹر کا استعمال کرکے اس تک رسائی حاصل کی جاسکتی ہے۔

emp1.name = "اشوک"؛

ایک ڈھانچہ متغیر میں شامل معلومات کو اسی طرح کے دوسرے ڈھانچے متغیر کو تفویض کیا جاسکتا ہے۔


emp1.name = "اشوک"؛ emp1.company_name = "ٹیکپکس"؛ emp1.city = "دہلی"؛ ایمپ 2 = ایمپ 1؛ // ایمپ 1 کے ممبر کی اقدار تفویض 2۔ cout <

یہاں ، ہم نے ڈھانچہ متغیر ’ایمپ 1 assigned کو’ ایمپ 2 ′ پر تفویض کیا ہے ، لہذا ، ’ایمپ 1‘ اپنے ممبروں کی ساری قیمت کا تقاضہ ’ای پی ایم 2‘ کے اسی ممبر کو کرتا ہے۔

ڈھانچہ متغیر کے رکن کو تقریب میں منتقل کیا جاسکتا ہے۔

فنکٹ (emp1.city)؛

پورے ڈھانچے کے متغیر کو تقریب میں منتقل کیا جاسکتا ہے ، دونوں طریقوں کے ذریعہ قدر کے لحاظ سے کال اور حوالہ سے کال۔

فونٹ (ایمپ 1)؛ // ویلنگ کے ذریعہ کال کے ذریعے کال کرنے کا فنکشن۔ . . باطل فنکٹ (اسٹرک ملازم ایمپ) {// ایمپ 1 کے ممبروں کی قدر کو حاصل کرنا۔ cout <

یہاں ، ڈھانچے متغیر کے ممبر کی قیمت میں ہونے والی تبدیلی تقریب کے باہر کی عکاسی نہیں کرے گی کیونکہ متغیر کال کے ذریعہ ویلیوئل میسیڈ کے ذریعہ منظور کیا جاتا ہے۔ اب آئیے وہی کام کال کے ذریعے حوالہ کے طریقہ کار سے کریں۔

فونٹ (& emp1)؛ // حوالہ کے طریقہ کار کے ذریعہ کال کے ذریعے کال کرنے کا فنکشن۔ . . باطل فنکٹ (ڈھانچہ ملازم * ایمپ) {// ایمپ 1 کا پتے وصول کرنا۔ emp-> شہر = "نور"؛ // ڈھانچے متغیر emp1 کے ممبر (شہر) کی قدر تبدیل کریں۔ . }

یہاں ، ساخت کے متغیر کو حوالہ سے منظور کیا جاتا ہے ، لہذا ، ساخت کے متغیر کے ممبروں کی قیمت میں تبدیلی بھی تقریب کے باہر کی عکاسی کرتی ہے۔

سٹرکٹ ملازم * ایمپ؛ // قسم کے ملازم کے ڈھانچے کی طرف اشارہ کرنا۔ ایمپ = & ایمپ 1؛ // اشارے کو ایمپ 1 کا پتہ تفویض کرنا۔ emp-> شہر // ممبر شہر تک رسائی حاصل کرنے والا پوائنٹر۔

ڈھانچے کی طرف اشارہ بھی بنایا جاسکتا ہے۔ اس میں ساخت کے متغیر کا پتہ موجود ہے۔

ڈھانچے میں مجموعی ابتدا کی اجازت دی جاتی ہے جب ساخت کی تعریف پر مشتمل نہیں ہوتا ہے ، کسی صارف کی متعین تعمیراتی یا ورچوئل فنکشنز یا بیس کلاس یا نجی یا محفوظ فیلڈ۔

int main () {ep epm3 = {"انیل" ، "ٹیکپکس" ، "نور"}؛ } // ملازم کے ڈھانچے میں ممکنہ طور پر مذکورہ بالا چیزوں پر مشتمل نہیں ہے۔

یونین کی تعریف

یونین ایک میموری مقام ہے جو دو یا دو سے زیادہ مختلف قسم کے متغیر کے ذریعہ مشترکہ اقسام کے تحت اعلان کیا جاتا ہے۔ یونین کا اعلان کرنے کے لئے استعمال ہونے والا کلیدی لفظ "یونین" ہے۔ C ++ میں ، ایک یونین میں ممبر کا فعل اور متغیر دونوں شامل ہوسکتے ہیں۔ پہلے سے ، یونین کے تمام ممبر "عوامی" ہوتے ہیں۔ "یونین" کا اعلان ڈھانچے کے اعلان کے مترادف ہے۔

یونین u_type {انٹ ایکس ، چار سی؛ تیرنا f؛ 1 u1 ، u2؛

یہاں ، ہم نے u_type نامی یونین کا اعلان کیا تھا۔ u_type کے ممبر انٹیجر قسم کے ‘x’ ، کریکٹر ٹائپ کے ‘c’ اور فلوٹ ٹائپ کے ‘f’ ہوتے ہیں۔ ہم نے یونین کے اعلان کے فورا. بعد ، 'u_type' قسم کے ، یونین متغیرات 'u1' اور 'u2' بھی بنائے تھے۔ ہم یونین کے اعلان سے بھی یونین کو متغیر قرار دے سکتے ہیں۔

int main () {یونین u_type u1 ، u2؛ // C ++ میں کلیدی لفظ یونین لازمی نہیں ہے۔ }

یونین کے ممبروں تک رسائی ڈاٹ (.) آپریٹر استعمال کرکے کی جاسکتی ہے ، اس سے پہلے یونین متغیر ہوتا ہے اور اس متغیر کے ممبر کی پیروی کرتا ہے۔

u1.x = 10؛

ڈھانچے کی طرح ، مجموعی ابتدا یونین میں ممکن نہیں ہے۔ جیسا کہ ہم جانتے ہیں کہ یونین اپنے تمام ممبروں کے لئے ایک ہی میموری کی جگہ کا حص sharesہ کرتا ہے ایک وقت میں صرف ایک متغیر کی ابتدا کی جاتی ہے اور تمام متغیر خود بخود ابتدائی قدر کے ساتھ اپ ڈیٹ ہوجاتے ہیں۔

u1.x = 10؛ cout <

اگر آپ ’u1‘ کے کسی ممبر کی قدر بدلنے کی کوشش کرتے ہیں۔ دوسرے ممبر کو خود بخود اس قدر میں تازہ کاری ہوجائے گی۔

u1.c = 65؛ cout <

یونین کو الاٹ کی گئی جگہ یونین کے سب سے بڑے ممبر کے سائز کے برابر ہے۔ چونکہ ’چار‘ کے لئے مختص کردہ بائٹ 1 بائٹ ہے ، ‘انٹ’ 4 بائٹ اور ‘فلوٹ’ 4 بائٹ ہے لہذا سب سے بڑا سائز 4 بائٹ ہے۔ لہذا ، میموری کو 'u1' اور 'u2' کو 4 بائٹ الاٹ کیا جاتا ہے۔

INT مین () {INT سائز_1 = سائز (u1)؛ // 4 انٹ سائز_ = سائز (u2)؛ // 4

یونین کی طرف اشارہ بالکل اسی طرح بنایا جاسکتا ہے جیسے ساخت میں۔ پوائنٹر یونین کا پتہ رکھتا ہے۔

یونین u_type * ان؛ un = & u1؛ cout <ایکس؛ // 10

ڈھانچے کی طرح ، یونین کو بھی دونوں طریقوں کے ذریعہ افعال میں منتقل کیا جاسکتا ہے یعنی قدر کے لحاظ سے کال اور حوالہ سے کال۔

فنکٹ (u1)؛ // ویلنگ کے ذریعہ کال کے ذریعے کال کرنے کا فنکشن۔ . . باطل فنکٹ (یونین u_type اقوام متحدہ) {// u1 کے ممبر کی قدر وصول کرنا۔ cout <

اب ، حوالہ طریقہ کے ذریعہ کال کا استعمال کرتے ہوئے فنکشن کو کال کریں۔

فنکٹ (& u1)؛ // ریفرینس کے طریقہ کار کے ذریعہ کال کے ذریعے کال کرنے کا فنکشن۔ . . باطل فنکٹ (یونین u_type اقوام متحدہ) {// u1 کا پتہ وصول کرنا۔ un-> x = 20۔ }

C ++ میں ایک خاص قسم کی یونین ہے جسے گمنام یونین کہا جاتا ہے۔ گمنام یونین میں ٹائپ کا نام نہیں ہوسکتا ہے اور ، ایسی یونین کا کوئی تغیر پیدا نہیں کیا جاسکتا ہے۔ یہ صرف مرتب کرنے والے کو بتانا ہے کہ اس کے ممبر متغیر ایک ہی جگہ کا اشتراک کریں گے۔ گمنام یونین کے متغیر کو عام ڈاٹ (.) آپریٹر کے بغیر بھیجا جاسکتا ہے۔

int main () {Union {// گمنام یونین کی قسم کے نام کے ساتھ وضاحت کریں۔ انٹ ایکس ، چار سی؛ تیرنا f؛ }؛ x = 10؛ // آؤٹ ڈاٹ آپریٹر cout کے ساتھ یونین متغیر کا حوالہ <

گمنام یونین میں کسی ممبر کی تقریب کی اجازت نہیں ہے ، اس میں نجی یا محفوظ ڈیٹا شامل نہیں ہوسکتا ہے ، اور عالمی گمنام یونین کو 'جامد' کے طور پر بیان کرنا ضروری ہے۔

عام یونین کے اعلامیہ کے لئے یاد رکھنے والے نکات۔

  • یونین کی تعریف میں کنسٹرکٹر اور ڈسٹرکٹر بھی شامل ہوسکتے ہیں۔
  • یونین ایک ہی میموری والے مقام کو دیکھنے کے لئے متعدد طریقے مہیا کرتا ہے۔
  • یونین کسی بھی قسم کی کلاس کا وارث نہیں ہوسکتا ہے۔
  • یونین بیس کلاس نہیں ہوسکتی ہے۔
  • یونین میں ورچوئل ممبر کا فنکشن نہیں ہوسکتا ہے۔
  • یونین میں جامد متغیر نہیں ہوسکتا ہے۔
  1. ساخت مختلف ممبروں کے لئے میموری کی مختلف جگہ استعمال کرتا ہے۔ لہذا ، تمام ممبروں کو الگ قیمت دی جا سکتی ہے۔ لیکن ، یونین تمام ممبروں کو یکساں میموری مقام فراہم کرتا ہے۔ لہذا ، تمام ممبروں کو ایک ہی قیمت مختص کی جاسکتی ہے۔
  2. اس ڈھانچے میں تمام ممبروں کے لئے میموری کی مختلف جگہ ہوتی ہے۔ لہذا ، اس میں ایک وقت میں متعدد اقدار شامل ہوسکتی ہیں ، اور جیسا کہ ہم جانتے ہیں کہ یونین تمام ممبروں کے لئے یکساں میموری کی جگہ کا شریک ہے ، لہذا یہ ایک وقت میں ایک ہی قیمت کو محفوظ کرسکتا ہے۔
  3. عام طور پر ، ڈھانچے کا کل سائز یونین کے کل سائز سے بڑا ہوتا ہے کیونکہ کسی ڈھانچے کا سائز ڈھانچے کے تمام ممبروں کے سائز کا مجموعہ ہوتا ہے اور یونین کا سائز ممبر کے ممبر کا سائز ہوتا ہے سب سے بڑی قسم
  4. ساخت ہر جگہ کا ایک نظریہ پیش کرتا ہے جبکہ یونین ایک ہی جگہ کے متعدد نظارے فراہم کرتا ہے۔
  5. آپ گمنام یونین کا اعلان کرسکتے ہیں لیکن گمنام ڈھانچہ نہیں۔

مماثلت:

  • ڈھانچہ اور یونین دونوں کے پاس خود اعلان کرنے ، متغیر پیدا کرنے اور متغیر کے ممبران تک رسائی کا ایک ہی طریقہ ہے۔
  • ڈھانچے اور یونین دونوں طریقوں کے ذریعہ ایک فنکشن میں منتقل کیا جاسکتا ہے جس کی قدر کے لحاظ سے کال ہوتی ہے اور حوالہ سے کال ہوتی ہے۔
  • ڈھانچہ اور یونین دونوں کنٹینر ڈیٹا ٹائپ ہیں اور کسی بھی ڈیٹا ٹائپ کی آبجیکٹ پر مشتمل ہیں ، بشمول دیگر ڈھانچہ ، یونین ، ارے ان کے ممبروں کی طرح

نتیجہ:

دونوں ، ساخت اور یونین کنٹینر ڈیٹا ٹائپ ہیں جو مختلف اقسام کے ممبر پر مشتمل ہیں۔ لیکن ڈھانچے کا استعمال اس وقت ہوتا ہے جب ہمیں میموری کے ایک الگ مقام پر تمام ممبروں کے لئے الگ قدر ذخیرہ کرنے کی ضرورت ہو۔ جب اقسام کی تبدیلی کی ضرورت ہوتی ہے تو یونینیں استعمال ہوتی ہیں۔