C ++ رسائی کی تفصیلات۔

C Access Specifiers



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

لفظ رسائی کا مطلب ہے کسی متغیر کی قدر کو پڑھنا یا تبدیل کرنا ، اور اس کا مطلب فنکشن استعمال کرنا بھی ہے۔ C ++ رسائی کی وضاحت کرنے والے الفاظ ہیں ، نجی ، محفوظ اور عوامی۔ وہ فیصلہ کرتے ہیں کہ آیا کوئی ممبر اپنی کلاس کے دوسرے ممبروں تک رسائی حاصل کر سکتا ہے ، یا اگر کوئی فنکشن یا آپریٹر کلاس سے باہر ہے اور کلاس سے تعلق نہیں رکھتا تو وہ کلاس کے کسی بھی رکن تک رسائی حاصل کر سکتا ہے۔ وہ یہ بھی فیصلہ کرتے ہیں کہ آیا اخذ کردہ (بچے) کلاس کا رکن والدین کی کلاس کے رکن تک رسائی حاصل کر سکتا ہے۔







اس مضمون کو سمجھنے اور فراہم کردہ کوڈ کو جانچنے کے لیے C ++ کا بنیادی علم درکار ہے۔



مضمون کا مواد۔

سرکاری اور نجی تفصیلات۔

کلاس
کلاس کا کوئی بھی ممبر اسی کلاس کے کسی دوسرے ممبر تک رسائی حاصل کرسکتا ہے ، جس سے آزاد عوامی یا نجی لیبل لگا ہوا ہے۔ مندرجہ ذیل پروگرام پر غور کریں:



#شامل کریں
استعمال کرتے ہوئے نام کی جگہگھنٹے؛

کلاسTheCla
{
نجی:
intنمبر 1؛
intنمبر 2؛
عوام:
TheCla(intn1 ،intn2)
{
نمبر 1=n1؛نمبر 2=n2؛
}
intطریقہ()
{
واپسینمبر 1؛
}
}؛

intمرکزی()
{
TheCla obj(10۔،بیس)؛
intنمبر 2=objطریقہ()؛
لاگت<<نمبر 2<<'n'؛

// int no1 = obj.num1

واپسی ؛
}

آؤٹ پٹ 10 ہے۔ پرائیویٹ ممبرز num1 اور num2 ہیں۔ عوامی ممبران TheCla () اور method () ہیں۔ نوٹ کریں کہ TheCla () کنسٹرکٹر فنکشن ہے جو دلچسپی کے متغیرات کو شروع کرتا ہے۔ ایک ایکسیس سپیسفائر کا علاقہ اس کے لیبل سے کلاس کی تفصیل (تعریف) کے اختتام تک یا کسی اور ایکسیس سپیسفائر کے آغاز تک شروع ہوتا ہے۔





مین () فنکشن میں ، پہلا بیان کنسٹریکٹر فنکشن کو شامل کرنے کا فوری عمل ہے ، جو num1 اور num2 کو شروع کرتا ہے۔ اگلا بیان کلاس کے پبلک ممبر ، طریقہ () کو کال کرتا ہے۔

اب ، کلاس کی تفصیل (تعریف) میں ، پبلک ممبر فنکشن ، TheCla () ، نجی ممبروں تک رسائی حاصل کرتا ہے ، num1 اور num2۔ نیز ، پبلک ممبر فنکشن ، طریقہ () ، نجی ممبر تک رسائی حاصل کرتا ہے ، نمبر 1۔ کلاس کی تفصیل میں کوئی بھی رکن اسی کلاس کی تفصیل کے اندر کسی دوسرے ممبر تک رسائی حاصل کر سکتا ہے۔ اس سے کوئی فرق نہیں پڑتا کہ کون سا رکن نجی ہے یا عوامی۔



تاہم ، ایک فنکشن یا آپریٹر جو کلاس کی تفصیل میں اور کلاس کی تفصیل سے باہر نہیں بتایا گیا صرف کلاس کے عوامی ممبروں تک رسائی حاصل کر سکتا ہے۔ مین () فنکشن ، مثال کے طور پر ، ایک فنکشن ہے جو کلاس کی تفصیل سے باہر قرار دیا گیا ہے۔ یہ صرف طریقہ () اور TheCla () عوامی ممبروں تک رسائی حاصل کرنے میں کامیاب رہا ہے۔ مرکزی () فنکشن کے اندر ، TheCla () فنکشن obj (10 ، 20) ہے۔

بیرونی فنکشن یا باہر کا آپریٹر ، جیسے مین () فنکشن ، کلاس کے کسی بھی پرائیویٹ ممبر تک رسائی حاصل نہیں کر سکتا ، جیسے num1 یا num2۔ مرکزی () میں آخری مگر ایک بیان سے تبصرہ اشارے ، // کو ہٹا دیں۔ اگر آپ پروگرام کو مرتب کرنے کی کوشش کرتے ہیں تو ، نوٹ کریں کہ پروگرام مرتب نہیں ہوگا ، ایک غلطی کا پیغام دے گا۔

ڈیفالٹ وضاحتی۔
ایک کلاس کے لیے ڈیفالٹ وضاحتی نجی ہے۔ لہذا ، مذکورہ بالا کلاس کی تفصیل مندرجہ ذیل وضاحت کی طرح ہے ، نجی ، لیکن بغیر وضاحت کے:

کلاسTheCla
{
intنمبر 1؛
intنمبر 2؛
عوام:
TheCla(intn1 ،intn2)
{
نمبر 1=n1؛نمبر 2=n2؛
}
intطریقہ()
{
واپسینمبر 1؛
}
}؛

نوٹ : رسائی وضاحتی لیبل وضاحتی سے شروع ہوتا ہے ، اور اس کے بعد بڑی آنت ہوتی ہے۔

محفوظ کردہ تفصیلات۔

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

محفوظ وضاحتی کا مسئلہ اس وقت سامنے آتا ہے جب اخذ کردہ (وراثت میں) کلاس کے ارکان کو بیس (والدین) کلاس کے ممبروں تک رسائی حاصل کرنی چاہیے۔

عوامی ماخوذ کلاس۔ عوامی ممبران کے ساتھ
مندرجہ ذیل پروگرام پر غور کریں:

#شامل کریں
استعمال کرتے ہوئے نام کی جگہگھنٹے؛

کلاسTheCla
{
عوام:
intنمبر 1= 10۔؛
محفوظ:
intنمبر 2= بیس؛
نجی:
intنمبر 3= 30۔؛
}؛

کلاسچائلڈکلا۔: عوامTheCla
{
عوام:
intطریقہ 1۔()
{
واپسینمبر 1؛
}
intطریقہ 2۔()
{
واپسینمبر 2؛
}
/*int طریقہ 3 ()
{
واپسی نمبر 3
} * /

}؛

intمرکزی()
{
ChildCla childObj؛
intنمبر 1=childObj.طریقہ 1۔()؛
لاگت<<نمبر 1<<'n'؛

intنمبر 2=childObj.طریقہ 2۔()؛
لاگت<<نمبر 2<<'n'؛

واپسی ؛
}

آؤٹ پٹ ہے۔:
10۔
بیس

بیس کلاس میں ، num1 عوامی ہے ، num2 محفوظ ہے ، اور num3 نجی ہے۔ اخذ کردہ کلاس میں ، تمام ممبر افعال عوامی ہیں۔ پہلا فنکشن ، طریقہ 1 () ، عوامی ڈیٹا ممبر ، نمبر 1 تک رسائی حاصل کرتا ہے۔ دوسرا فنکشن ، طریقہ 2 () ، محفوظ ڈیٹا ممبر ، نمبر 2 تک رسائی حاصل کرتا ہے۔ تیسرا فنکشن ، طریقہ 3 () ، اگرچہ فی الحال تبصرہ کیا گیا ہے ، پرائیویٹ ڈیٹا ممبر ، نمبر 3 تک رسائی حاصل کرنی چاہئے۔

ایک اخذ کردہ کلاس کو رسائی کے وضاحتی (عوامی ، محفوظ یا نجی) کے بغیر اعلان نہیں کیا جاتا ہے۔ اوپر ، اخذ کردہ کلاس کو عوامی وضاحت کنندہ کے ساتھ اعلان کیا گیا ہے ، یعنی:

کلاسچائلڈکلا۔: عوامTheCla{}

اب اخذ کردہ کلاس میں تیسرے ممبر فنکشن کی تعریف کو غیر تبصرہ کریں۔ اگر آپ پروگرام کو مرتب کرنے کی کوشش کرتے ہیں تو ، نوٹ کریں کہ یہ مرتب نہیں ہوگا ، ایک غلطی کا پیغام دے گا۔

نوٹ : جب پوری اخذ کردہ کلاس کو پبلک قرار دیا جائے تو اس کے ممبر بیس کلاس کے پرائیویٹ ممبرز تک رسائی حاصل نہیں کر سکتے۔ تاہم ، اس کے ممبران بیس کلاس کے عوام اور محفوظ ارکان تک رسائی حاصل کر سکتے ہیں۔ مذکورہ پروگرام اس کی وضاحت کرتا ہے۔

تاہم ، نوٹ کریں کہ عوامی اخذ کردہ کلاس کا ایک عوامی رکن بیس کلاس کے محفوظ رکن تک رسائی حاصل کرسکتا ہے۔

ماخوذ کلاس وضاحتی اور رکن وضاحتی۔

عوامی ممبران کے ساتھ محفوظ ڈیریوڈ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں عوامی وضاحت کرنے والے کو محفوظ کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: محفوظTheCla{}

پروگرام مرتب کریں اور چلائیں اور نوٹ کریں کہ نتیجہ پہلے جیسا ہی ہے۔

لہذا ، جب پوری اخذ کردہ کلاس کو محفوظ قرار دیا جاتا ہے ، اس کے ممبران بیس کلاس کے نجی ممبروں تک رسائی حاصل نہیں کرسکتے ہیں۔ تاہم ، اس کے ممبران بیس کلاس کے عوام اور محفوظ ارکان تک رسائی حاصل کر سکتے ہیں۔ یہ وہی ہے جب اخذ کردہ طبقے کو عوامی قرار دیا جاتا ہے۔

نوٹ : عوامی اخذ کردہ کلاس کا ایک محفوظ رکن بیس کلاس کے محفوظ رکن تک رسائی حاصل کرسکتا ہے۔

پبلک ممبرز کے ساتھ پرائیویٹ ڈیریوڈ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں محفوظ وضاحتی کو نجی کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: نجیTheCla{}

پروگرام مرتب کریں اور چلائیں اور نوٹ کریں کہ نتیجہ پہلے جیسا ہی ہے۔

لہذا ، جب پوری اخذ کردہ کلاس کو نجی قرار دیا جاتا ہے ، اس کے ممبران بیس کلاس کے نجی ممبروں تک رسائی حاصل نہیں کرسکتے ہیں۔ تاہم ، اس کے ممبران بیس کلاس کے عوام اور محفوظ ارکان تک رسائی حاصل کر سکتے ہیں۔ یہ وہی ہے جب اخذ کردہ طبقہ کو محفوظ یا عوامی قرار دیا جاتا ہے۔

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

#شامل کریں
استعمال کرتے ہوئے نام کی جگہگھنٹے؛

کلاسTheCla
{
عوام:
intنمبر 1= 10۔؛
محفوظ:
intنمبر 2= بیس؛
نجی:
intنمبر 3= 30۔؛
}؛

کلاسچائلڈکلا۔: عوامTheCla
{
محفوظ:
intطریقہ 1۔()
{
واپسینمبر 1؛
}
intطریقہ 2۔()
{
واپسینمبر 2؛
}
/*int طریقہ 3 ()
{
واپسی نمبر 3
} * /

}؛

intمرکزی()
{
/*ChildCla childObj؛
int no1 = childObj.method1 ()
لاگت<
/*int no2 = childObj.method2 ()
لاگت<
واپسی ؛
}

پروگرام اسی طرح کام کرتا ہے۔ کوئی آؤٹ پٹ نہیں ہے ، اور کوئی آؤٹ پٹ نہیں ہونا چاہیے ، اس بنیاد پر کہ پروگرام کیسے ٹائپ کیا گیا ہے۔

اب ، اخذ کردہ کلاس میں فنکشن کی تعریف ، طریقہ 3 () پر تبصرہ نہ کریں۔ اگر آپ پروگرام کو مرتب کرنے کی کوشش کرتے ہیں تو ، نوٹ کریں کہ یہ مرتب نہیں ہوگا ، ایک غلطی کا پیغام دے گا۔ اس کا مطلب یہ ہے کہ کسی پرائیویٹ ممبر کو باہر کے فنکشن ، آؤٹ آپریٹر ، یا ڈیویریٹ کلاس سے رسائی حاصل نہیں کی جا سکتی۔ یہ وہی نتیجہ ہے جو کہ پرائیویٹ ممبر تک رسائی کے حوالے سے اوپر دیا گیا ہے۔

نوٹ : محفوظ ماخوذ کلاس کا ایک محفوظ رکن بیس کلاس کے محفوظ رکن تک رسائی حاصل کرسکتا ہے۔

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

اگر مرکزی () فنکشن کا دوسرا کوڈ طبقہ غیر تبصرہ ہے ، تو وہی وضاحت لاگو ہوگی۔ یعنی ، مین () فنکشن اخذ کردہ کلاس یا بیس کلاس کے محفوظ یا نجی رکن تک رسائی حاصل نہیں کر سکے گا۔ یہ اس بات سے آزاد ہے کہ آیا اخذ کردہ کلاس کا ایک محفوظ رکن بیس کلاس کے محفوظ رکن تک رسائی حاصل کر سکتا ہے۔

محفوظ ممبران کے ساتھ محفوظ ڈیریوڈ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں عوامی وضاحت کرنے والے کو محفوظ کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: محفوظTheCla{}

کوڈ حصوں کے تبصرے کو مرکزی () فنکشن میں واپس رکھیں ، اگر یہ پہلے نہیں کیا گیا ہے۔ پروگرام مرتب کریں اور چلائیں اور نوٹ کریں کہ نتیجہ پہلے جیسا ہے۔

محفوظ اراکین کے ساتھ نجی ماخوذ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں محفوظ وضاحتی کو نجی کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: نجیTheCla

پروگرام مرتب کریں اور چلائیں اور نوٹ کریں کہ نتیجہ پہلے کی طرح ہوگا۔

پرائیویٹ ممبرز کے ساتھ پبلک ڈیریوڈ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں پرائیویٹ سپیسفائر کو عوام کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: عوامTheCla{}

اخذ کردہ کلاس کے ارکان کو نجی بنائیں۔ پروگرام مرتب کریں اور چلائیں۔ نتیجہ پبلک ڈیریوڈ کلاس ود پروٹیکٹڈ ممبرز کیس سے مختلف نہیں ہے۔

پرائیویٹ ممبرز کے ساتھ محفوظ ڈیریوڈ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں عوامی وضاحت کرنے والے کو محفوظ کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: محفوظTheCla{}

پروگرام مرتب کریں اور چلائیں۔ یہ نتیجہ پروٹیکٹڈ ڈیریوڈ کلاس ود پروٹیکٹڈ ممبرز کیس سے مختلف نہیں ہے۔

پرائیویٹ ممبرز کے ساتھ پرائیویٹ ڈیریوڈ کلاس۔
مندرجہ بالا اخذ کردہ کلاس کے اعلامیے میں محفوظ وضاحتی کو نجی کے ساتھ تبدیل کریں:

کلاسچائلڈکلا۔: نجیTheCla{}

پروگرام مرتب کریں اور چلائیں۔ یہ نتیجہ پرائیویٹ ڈیریوڈ کلاس ود پروٹیکٹڈ ممبرز کیس سے مختلف نہیں ہے۔

نتیجہ

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

بیس کلاس کے ممبر کو محفوظ بنایا جانا چاہیے تاکہ بیس کلاس کے پرائیویٹ ممبر تک رسائی حاصل کی جا سکے۔ بیس کلاس کے اس محفوظ رکن کو بیرونی فنکشن یا باہر کے آپریٹر کے ذریعہ بیس کلاس کے نجی رکن کے طور پر دیکھا جاتا ہے۔

کسی کلاس کے پبلک ممبر تک کسی بھی بیرونی فنکشن ، کسی بھی بیرونی آپریٹر ، یا ڈیویریٹڈ کلاس تک رسائی حاصل کی جا سکتی ہے۔

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

اس کام میں استعمال شدہ حوالہ جات۔