ابتدائیوں کے لیے C++ کیسے سیکھیں۔

Abtdayyw K Ly C Kys Syk Y



C++ وسیع پیمانے پر اور سب سے زیادہ استعمال ہونے والی پروگرامنگ زبان ہے۔ یہ زبان ابتدائی طور پر تیار کی گئی C زبان کی بہتری کے طور پر قائم کی گئی تھی اور C زبان سے متاثر تھی، اس لیے یہ C پروگرامنگ زبان کا ایک سپر سیٹ ہے جو دوسرے ٹولز اور لائبریریوں کے ساتھ بھی کام کرتا ہے جو قابل رسائی تھے اور C زبان میں استعمال ہوتے تھے۔ . یہ ایک مرتب شدہ زبان ہے جو کہ امپریئس بھی ہے۔

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

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







C++ زبان کے اجزاء:

# شامل کریں



یہ کمانڈ ایک ہیڈر فائل ہے جس میں 'cout' کمانڈ شامل ہے۔ صارف کی ضروریات اور ترجیحات کے لحاظ سے ایک سے زیادہ ہیڈر فائل ہو سکتی ہے۔



int main()





یہ سٹیٹمنٹ ماسٹر پروگرام فنکشن ہے جو ہر C++ پروگرام کے لیے لازمی شرط ہے، جس کا مطلب ہے کہ اس سٹیٹمنٹ کے بغیر کوئی بھی C++ پروگرام نہیں چلا سکتا۔ یہاں 'int' ریٹرن متغیر ڈیٹا کی قسم ہے جو ڈیٹا کی قسم کے بارے میں بتاتی ہے کہ فنکشن کس قسم کی واپسی کر رہا ہے۔

اعلامیہ:



متغیرات کا اعلان کیا جاتا ہے اور ان کو نام تفویض کیے جاتے ہیں۔

مسئلہ یہ بیان:

یہ ایک پروگرام میں ضروری ہے اور یہ ایک 'while' loop، 'for' loop یا کوئی دوسری شرط لگائی جا سکتی ہے۔

آپریٹرز:

آپریٹرز C++ پروگراموں میں استعمال ہوتے ہیں اور کچھ اہم ہوتے ہیں کیونکہ ان کا اطلاق حالات پر ہوتا ہے۔ چند اہم آپریٹرز ہیں &&, ||, !, &, !=, |, &=, |=, ^, ^=۔

C++ ان پٹ آؤٹ پٹ:

اب، ہم C++ میں ان پٹ اور آؤٹ پٹ صلاحیتوں پر بات کریں گے۔ C++ میں استعمال ہونے والی تمام معیاری لائبریریاں زیادہ سے زیادہ ان پٹ اور آؤٹ پٹ صلاحیتیں فراہم کر رہی ہیں جو بائٹس کی ترتیب کی صورت میں انجام دی جاتی ہیں یا عام طور پر اسٹریمز سے متعلق ہوتی ہیں۔

ان پٹ سلسلہ:

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

آؤٹ پٹ سٹریم:

اگر بائٹس کو مخالف سمت میں سٹریم کیا جاتا ہے، تو یہ آؤٹ پٹ اسٹریم ہے۔

ایک ہیڈر فائل کو C++ میں ان پٹ اور آؤٹ پٹ کی سہولت کے لیے استعمال کیا جاتا ہے۔ اسے کے طور پر لکھا گیا ہے جو کہ مثال کے طور پر سٹو اور سیٹ کی درستگی کے طریقے فراہم کرتا ہے۔ ان پٹ اور آؤٹ پٹ کمانڈز cin، cout، cerr، اور clog ہیں۔ یہاں، 'cin' معیاری ان پٹ کو ظاہر کرتا ہے اور 'cout' اس معیاری آؤٹ پٹ ڈیوائس کی نشاندہی کرتا ہے جو اسٹریم انسرشن آپریٹرز (<<) کے ساتھ اسکرین پر بیانات ظاہر کرنے کے لیے استعمال ہوتا ہے۔

مثال:

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

پہلی سطر میں، ہم 'iostream' کو شامل کر رہے ہیں جس میں تقریباً تمام ضروری لائبریریاں ہیں جن کی ہمیں C++ پروگرام کے عمل کے لیے ضرورت ہو سکتی ہے۔ اگلی لائن میں، ہم ایک نام کی جگہ کا اعلان کر رہے ہیں جو شناخت کنندگان کے لیے گنجائش فراہم کرتا ہے۔ مین فنکشن کو کال کرنے کے بعد، ہم ایک کریکٹر ٹائپ اری شروع کر رہے ہیں جو سٹرنگ میسج کو اسٹور کرتا ہے اور 'cout' اسے کنکٹینٹ کرکے دکھاتا ہے۔ ہم سکرین پر متن کو ظاہر کرنے کے لیے 'cout' استعمال کر رہے ہیں۔ اس کے علاوہ، ہم نے کریکٹرز کی سٹرنگ کو ذخیرہ کرنے کے لیے کریکٹر ڈیٹا ٹائپ اری کے ساتھ ایک متغیر 'A' لیا اور پھر ہم نے 'cout' کمانڈ کا استعمال کرتے ہوئے جامد پیغام کے ساتھ دونوں ارے پیغام کو شامل کیا۔

تیار کردہ آؤٹ پٹ ذیل میں دکھایا گیا ہے:

مثال:

اس صورت میں، ہم ایک سادہ سٹرنگ پیغام میں صارف کی عمر کی نمائندگی کریں گے۔

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

یہ پیغام پروگرام کو مکمل کرنے کے بعد اسکرین پر دکھایا جاتا ہے تاکہ صارف عمر حاصل کر سکے اور پھر ENTER دبائیں

مثال:

یہاں، ہم یہ ظاہر کرتے ہیں کہ 'cout' کے استعمال سے سٹرنگ کیسے پرنٹ کی جاتی ہے۔

سٹرنگ پرنٹ کرنے کے لیے، ہم ابتدائی طور پر ایک لائبریری اور پھر شناخت کنندگان کے لیے نام کی جگہ شامل کرتے ہیں۔ دی مرکزی() فنکشن کہا جاتا ہے. مزید، ہم اندراج آپریٹر کے ساتھ 'cout' کمانڈ کا استعمال کرتے ہوئے ایک سٹرنگ آؤٹ پٹ پرنٹ کر رہے ہیں جو اس کے بعد اسکرین پر جامد پیغام کو ظاہر کر رہا ہے۔

C++ ڈیٹا کی اقسام:

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

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

C++ زبان ڈیٹا کی اقسام کے تنوع کی مدد کر رہی ہے تاکہ پروگرامر مناسب ڈیٹا کی قسم کا انتخاب کر سکے جس کی اسے ضرورت ہو سکتی ہے۔

C++ ذیل میں بیان کردہ ڈیٹا کی اقسام کے استعمال میں سہولت فراہم کرتا ہے۔

  1. صارف کی وضاحت کردہ ڈیٹا کی اقسام
  2. اخذ کردہ ڈیٹا کی اقسام
  3. بلٹ ان ڈیٹا کی اقسام

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

int a = دو ; // عددی قدر

تیرنا F_N = 3.66 ; // فلوٹنگ پوائنٹ ویلیو

دگنا D_N = 8.87 ; // ڈبل فلوٹنگ پوائنٹ ویلیو

چار الفا = 'p' ; // کردار

bool b = سچ ; // بولین

ڈیٹا کی چند عام اقسام: وہ کس سائز کی وضاحت کرتے ہیں اور ان کے متغیرات کس قسم کی معلومات کو محفوظ کریں گے ذیل میں دکھایا گیا ہے:

  • چار: ایک بائٹ کے سائز کے ساتھ، یہ ایک ہی حرف، حرف، نمبر، یا ASCII اقدار کو محفوظ کرے گا۔
  • بولین: 1 بائٹ کے سائز کے ساتھ، یہ صحیح یا غلط کے طور پر اقدار کو ذخیرہ کرے گا اور واپس کرے گا۔
  • Int: 2 یا 4 بائٹس کے سائز کے ساتھ، یہ پورے اعداد کو ذخیرہ کرے گا جو اعشاریہ کے بغیر ہیں۔
  • فلوٹنگ پوائنٹ: 4 بائٹس کے سائز کے ساتھ، یہ فریکشنل نمبرز کو اسٹور کرے گا جن میں ایک یا زیادہ اعشاریہ ہیں۔ یہ 7 اعشاریہ ہندسوں تک ذخیرہ کرنے کے لیے کافی ہے۔
  • ڈبل فلوٹنگ پوائنٹ: 8 بائٹس کے سائز کے ساتھ، یہ ان فرکشنل نمبرز کو بھی اسٹور کرے گا جن میں ایک یا زیادہ اعشاریہ ہیں۔ یہ 15 اعشاریہ ہندسوں تک ذخیرہ کرنے کے لیے کافی ہے۔
  • باطل: بغیر کسی مخصوص سائز کے باطل میں کوئی بے قیمت چیز ہوتی ہے۔ لہذا، یہ ان فنکشنز کے لیے استعمال ہوتا ہے جو null ویلیو واپس کرتے ہیں۔
  • وائڈ کریکٹر: 8 بٹ سے زیادہ سائز کے ساتھ جو کہ عام طور پر 2 یا 4 بائٹس لمبا ہوتا ہے اسے wchar_t سے ظاہر کیا جاتا ہے جو کہ char سے ملتا جلتا ہے اور اس طرح ایک کریکٹر ویلیو بھی محفوظ کرتا ہے۔

مذکورہ بالا متغیر کا سائز پروگرام یا کمپائلر کے استعمال کے لحاظ سے مختلف ہو سکتا ہے۔

مثال:

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

اس کوڈ میں، ہم لائبریری کو مربوط کر رہے ہیں۔ جس کے بعد، ہم 'نام کی جگہ' استعمال کر رہے ہیں۔ اگلی لائن میں، ہم کال کر رہے ہیں۔ مرکزی() فنکشن جس میں ہم ایک 'cout' کمانڈ استعمال کر رہے ہیں جو پروگرام میں بیان کردہ تمام ڈیٹا اقسام کے سائز کو پرنٹ کرے گا۔ متغیر کا سائز معلوم کرنے کے لیے، ہمیں لاگو کرنا ہوگا۔ کا سائز() طریقہ

آؤٹ پٹ بائٹس میں موصول ہوتا ہے جیسا کہ تصویر میں دکھایا گیا ہے:

مثال:

یہاں ہم دو مختلف ڈیٹا کی اقسام کا سائز شامل کریں گے۔

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

ایک اور اصطلاح ہے جس کا یہاں ذکر کرنا ضروری ہے اور وہ ہے۔ 'ڈیٹا موڈیفائرز' . نام سے پتہ چلتا ہے کہ 'ڈیٹا موڈیفائرز' بلٹ ان ڈیٹا کی اقسام کے ساتھ ان کی لمبائی میں ترمیم کرنے کے لیے استعمال کیے جاتے ہیں جسے ایک مخصوص ڈیٹا ٹائپ کمپائلر کی ضرورت یا ضرورت کے مطابق برقرار رکھ سکتا ہے۔

درج ذیل ڈیٹا موڈیفائرز ہیں جو C++ میں قابل رسائی ہیں۔

  1. دستخط شدہ
  2. غیر دستخط شدہ
  3. لمبی
  4. مختصر

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

  • مختصر انٹ: 2 بائٹس کے سائز کے ساتھ، -32,768 سے 32,767 تک ترمیم کی ایک حد ہے
  • غیر دستخط شدہ مختصر انٹ: 2 بائٹس کے سائز کے ساتھ، اس میں 0 سے 65,535 تک ترمیم کی حد ہوتی ہے۔
  • غیر دستخط شدہ انٹ: 4 بائٹس کے سائز کے ساتھ، اس میں 0 سے 4,294,967,295 تک ترمیم کی حد ہوتی ہے۔
  • Int: 4 بائٹس کے سائز کے ساتھ، ترمیم کی حد ہے -2,147,483,648 سے 2,147,483,647 تک
  • لانگ انٹ: 4 بائٹس کے سائز کے ساتھ، ترمیم کی حد ہے -2,147,483,648 سے 2,147,483,647 تک
  • غیر دستخط شدہ طویل انٹ: 4 بائٹس کے سائز کے ساتھ، اس میں 0 سے 4,294,967.295 تک ترمیم کی حد ہوتی ہے۔
  • لمبا لمبا انٹ: 8 بائٹس کے سائز کے ساتھ، اس میں –(2^63) سے (2^63)-1 تک ترمیم کی ایک حد ہوتی ہے۔
  • غیر دستخط شدہ لمبا لمبا انٹ: 8 بائٹس کے سائز کے ساتھ، اس میں 0 سے 18,446,744,073,709,551,615 تک ترمیم کی حد ہوتی ہے۔
  • دستخط شدہ چار: 1 بائٹ کے سائز کے ساتھ، -128 سے 127 تک ترمیم کی ایک حد ہے
  • غیر دستخط شدہ چار: 1 بائٹ کے سائز کے ساتھ، اس میں 0 سے 255 تک ترمیم کی حد ہوتی ہے۔

C++ شمار:

C++ پروگرامنگ لینگویج میں 'Enumeration' ایک صارف کی وضاحت کردہ ڈیٹا ٹائپ ہے۔ گنتی کو بطور قرار دیا جاتا ہے ' enum' C++ میں۔ یہ پروگرام میں استعمال ہونے والے کسی بھی مستقل کو مخصوص نام الاٹ کرنے کے لیے استعمال ہوتا ہے۔ یہ پروگرام کی پڑھنے کی اہلیت اور استعمال کو بہتر بناتا ہے۔

نحو:

ہم درج ذیل کے طور پر C++ میں گنتی کا اعلان کرتے ہیں:

enum enum_Name { مستقل 1 ، Constant2 ، Constant3… }

C++ میں گنتی کے فوائد:

Enum کو درج ذیل طریقوں سے استعمال کیا جا سکتا ہے۔

  • اسے سوئچ کیس کے بیانات میں کثرت سے استعمال کیا جا سکتا ہے۔
  • یہ کنسٹرکٹرز، فیلڈز اور طریقے استعمال کر سکتا ہے۔
  • یہ صرف 'enum' کلاس کو بڑھا سکتا ہے، کسی اور کلاس کو نہیں۔
  • یہ مرتب کرنے کا وقت بڑھا سکتا ہے۔
  • اسے عبور کیا جا سکتا ہے۔

C++ میں گنتی کے نقصانات:

اینوم کے بھی کچھ نقصانات ہیں:

اگر ایک بار ایک نام شمار کیا جاتا ہے تو اسے دوبارہ اسی دائرہ کار میں استعمال نہیں کیا جاسکتا۔

مثال کے طور پر:

enum دن

{ سات ، سورج ، میرے } ;

int سات = 8 ; // اس لائن میں غلطی ہے۔

Enum کو آگے کا اعلان نہیں کیا جا سکتا۔

مثال کے طور پر:

enum شکلیں ;

کلاس رنگ

{

باطل ڈرا ( شکلیں ایک شکل ) ; // شکلوں کا اعلان نہیں کیا گیا ہے۔

} ;

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

مثال کے طور پر:

enum شکلیں

{

مثلث ، دائرہ ، مربع

} ;

int رنگ = نیلا ;

رنگ = مربع ;

مثال:

اس مثال میں، ہم C++ شمار کا استعمال دیکھتے ہیں:

اس کوڈ پر عمل درآمد میں، سب سے پہلے، ہم #include سے شروع کرتے ہیں۔ C++ میں ایک بھرپور لائبریری ہے۔ یہ ایک بلٹ ان لائبریری ہے۔ اس میں ان پٹ اور آؤٹ پٹ ڈیٹا اسٹریمز شامل ہیں۔ . اس کے بعد، ہم معیاری نام کی جگہ استعمال کرتے ہیں۔ پھر، ہم نے 'enum' کو ایک مخصوص نام کا بطور سبجیکٹ قرار دیا اور تین مضامین مقرر کیے جو کہ ریاضی، انگریزی اور اردو ہیں۔ ریاضی کی قیمت 1 تفویض کی گئی ہے۔ ہمارا مقصد enum میں اعلان کردہ سبجیکٹ کی اقدار کو پرنٹ کرنا ہے۔ پھر، ہم دعوت دیتے ہیں مرکزی() فنکشن میں مرکزی() ہمارے پاس cout<< ہے، جہاں 'c' کا مطلب ہے 'کریکٹر' اور آؤٹ کا مطلب ہے 'آؤٹ پٹ'۔ 'Cout' کا استعمال آؤٹ پٹ کو ظاہر کرنے کے لیے کیا جاتا ہے۔ . << اندراج آپریٹر کی طرف اشارہ کرتا ہے۔ 'cout<<' کا استعمال کرتے ہوئے، ہم enum ویلیوز پرنٹ کرتے ہیں۔ اگلا، ہم 'return 0' کمانڈ استعمال کریں گے۔ یہ کمانڈ نتیجہ واپس کرتا ہے جو اقدار کی شکل میں ہے۔

یہاں ہمارے عمل درآمد پروگرام کا نتیجہ ہے:

لہذا، جیسا کہ آپ دیکھ سکتے ہیں کہ ہمارے پاس مضامین کی قدریں ہیں: ریاضی، اردو، انگریزی؛ یعنی 1،2،3۔

مثال:

یہاں ایک اور مثال ہے جس کے ذریعے ہم enum کے بارے میں اپنے تصورات کو صاف کرتے ہیں:

اس پروگرام میں، ہم ہیڈر فائل کو مربوط کرکے شروع کرتے ہیں۔ یہ ایک بلٹ ان لائبریری ہے۔ اس میں ان پٹ اور آؤٹ پٹ ڈیٹا اسٹریمز شامل ہیں۔ اس کے بعد، ہمیں معیاری نام کی جگہ کا استعمال کرنا ہوگا۔ اس کے بعد، ہم نے انم ویلیوز کو مستقل کرنے والوں کو تفویض کیا جو کھلاڑی ہیں۔ ہمارا ہدف یہ ظاہر کرنا ہے کہ یہ کس کے اوپر ہے۔ اگلا، ہم اپنے کال کریں مرکزی() فنکشن میں مرکزی() فنکشن ہم نے دو مستقل مقرر کیے ہیں: شاداب، جس کی قدر 20 ہے 'bowler1' enum متغیر؛ اور آفریدی، جس کی قیمت اینوم متغیر 'بولر2' کے لیے 25 ہے۔

ہمیں if-else بیان استعمال کرنا ہوگا۔ . ہم نے موازنہ آپریٹر کو 'if' بیان کے اندر بھی استعمال کیا ہے جس کا مطلب ہے کہ ہم موازنہ کر رہے ہیں کہ آیا 'bowler2' 'bowler1' سے بڑا ہے۔ پھر، 'اگر' بلاک پر عمل درآمد ہوتا ہے جس کا مطلب ہے کہ یہ آفریدی کا اوور ہے۔ پھر، ہم نے آؤٹ پٹ کو ظاہر کرنے کے لیے 'cout<<' درج کیا۔ سب سے پہلے، ہم بیان پرنٹ کرتے ہیں 'یہ ختم ہو گیا ہے'۔ پھر، 'بولر2' کی قدر۔ اگر نہیں، تو دوسرے بلاک کو طلب کیا جاتا ہے، جس کا مطلب ہے کہ یہ شاداب کا اوور ہے۔ پھر، 'cout<<' کمانڈ کو لاگو کرنے سے ہم 'یہ ختم ہو گیا ہے' بیان ظاہر کرتے ہیں۔ پھر، 'bowler1' کی قدر۔

If-else کے بیان کے مطابق ہمارے پاس 25 سے زائد ہیں جو آفریدی کی قدر ہے۔ اس کا مطلب ہے کہ enum متغیر 'bowler2' کی قدر 'bowler1' سے زیادہ ہے اسی لیے 'if' اسٹیٹمنٹ کو عمل میں لایا جاتا ہے۔

C++ اگر اور، سوئچ کریں:

C++ پروگرامنگ لینگویج میں، ہم پروگرام کے بہاؤ کو تبدیل کرنے کے لیے 'if statement' اور 'switch statement' استعمال کرتے ہیں۔ یہ بیانات بالترتیب مذکورہ بیانات کی حقیقی قدر کے لحاظ سے پروگرام کے نفاذ کے لیے کمانڈز کے متعدد سیٹ فراہم کرنے کے لیے استعمال کیے جاتے ہیں۔ زیادہ تر معاملات میں، ہم آپریٹرز کو 'if' بیان کے متبادل کے طور پر استعمال کرتے ہیں۔ مذکورہ بالا تمام بیانات انتخابی بیانات ہیں جو فیصلہ کن یا مشروط بیانات کے نام سے جانے جاتے ہیں۔

'اگر' بیان:

یہ بیان کسی دی گئی حالت کو جانچنے کے لیے استعمال کیا جاتا ہے جب بھی آپ کسی پروگرام کے بہاؤ کو تبدیل کرنے کی طرح محسوس کرتے ہیں۔ یہاں، اگر کوئی شرط صحیح ہے تو پروگرام تحریری ہدایات پر عمل کرے گا لیکن اگر شرط غلط ہے، تو یہ صرف ختم ہو جائے گی۔ آئیے ایک مثال پر غور کریں؛

یہ سادہ 'if' اسٹیٹمنٹ ہے، جہاں ہم 'int' متغیر کو 10 کے طور پر شروع کر رہے ہیں۔ پھر، صارف سے ایک قدر لی جاتی ہے اور اسے 'if' اسٹیٹمنٹ میں کراس چیک کیا جاتا ہے۔ اگر یہ 'if' بیان میں لاگو شرائط کو پورا کرتا ہے، تو آؤٹ پٹ ظاہر ہوتا ہے۔

جیسا کہ منتخب کردہ ہندسہ 40 تھا، آؤٹ پٹ پیغام ہے۔

'اگر-اور' بیان:

ایک زیادہ پیچیدہ پروگرام میں جہاں 'if' بیان عام طور پر تعاون نہیں کرتا ہے، ہم 'if-else' بیان استعمال کرتے ہیں۔ دی گئی صورت میں، ہم لاگو شرائط کو چیک کرنے کے لیے 'if- else' کا بیان استعمال کر رہے ہیں۔

سب سے پہلے، ہم ڈیٹا ٹائپ 'int' کے متغیر کا اعلان کریں گے جس کا نام 'x' ہے جس کی قدر صارف سے لی گئی ہے۔ اب، 'if' اسٹیٹمنٹ کا استعمال کیا جاتا ہے جہاں ہم نے ایک شرط لگائی ہے کہ اگر صارف کی طرف سے داخل کردہ عددی قدر 2 ہے۔ آؤٹ پٹ مطلوبہ ہوگا اور ایک سادہ 'NICE TRY' پیغام ظاہر ہوگا۔ دوسری صورت میں، اگر درج کردہ نمبر 2 نہیں ہے، تو آؤٹ پٹ مختلف ہوگا۔

جب صارف نمبر 2 لکھتا ہے، تو درج ذیل آؤٹ پٹ دکھایا جاتا ہے۔

جب صارف 2 کے علاوہ کوئی دوسرا نمبر لکھتا ہے تو ہمیں جو آؤٹ پٹ ملتا ہے وہ یہ ہے:

If-else-if بیان:

Nested if-else-if بیانات کافی پیچیدہ ہیں اور استعمال کیے جاتے ہیں جب ایک ہی کوڈ میں متعدد شرائط لاگو ہوں۔ آئیے ایک اور مثال کا استعمال کرتے ہوئے اس پر غور کریں:

یہاں، ہیڈر فائل اور نام کی جگہ کو مربوط کرنے کے بعد، ہم نے متغیر 'm' کی قدر 200 کے طور پر شروع کی ہے۔ پھر 'm' کی قدر صارف سے لی جاتی ہے اور پھر پروگرام میں بیان کردہ متعدد شرائط کے ساتھ کراس چیک کیا جاتا ہے۔

یہاں، صارف نے 195 کی قدر کا انتخاب کیا۔ یہی وجہ ہے کہ آؤٹ پٹ ظاہر کرتا ہے کہ یہ 'm' کی اصل قدر ہے۔

بیان سوئچ کریں:

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

مطلوبہ لفظ 'بریک':

سوئچ اسٹیٹمنٹ میں کلیدی لفظ 'بریک' ہوتا ہے۔ یہ کوڈ کو آنے والے کیس پر عمل کرنے سے روکتا ہے۔ سوئچ اسٹیٹمنٹ کا عمل اس وقت ختم ہوجاتا ہے جب C++ کمپائلر 'بریک' کلیدی لفظ پر آتا ہے اور کنٹرول سوئچ اسٹیٹمنٹ کی پیروی کرنے والی لائن پر چلا جاتا ہے۔ سوئچ میں وقفے کا بیان استعمال کرنا ضروری نہیں ہے۔ اگر اسے استعمال نہیں کیا جاتا ہے تو پھانسی اگلے کیس کی طرف بڑھ جاتی ہے۔

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

اگر ہم گریڈ کے طور پر 'F' کا انتخاب کرتے ہیں، تو آؤٹ پٹ 'اگلی بار بہتر قسمت' ہے کیونکہ یہ وہ بیان ہے جسے ہم گریڈ 'F' ہونے کی صورت میں پرنٹ کرنا چاہتے ہیں۔

آئیے گریڈ کو X میں تبدیل کریں اور دیکھیں کہ کیا ہوتا ہے۔ میں نے گریڈ کے طور پر 'X' لکھا اور موصول ہونے والا آؤٹ پٹ نیچے دکھایا گیا ہے۔

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

If-else اور switch بیانات میں کچھ عام خصوصیات ہیں:

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

If-else اور switch کے بیانات کچھ طریقوں سے مختلف ہیں:

  • جبکہ صارف نے 'سوئچ' کیس کے بیانات میں اقدار کی وضاحت کی ہے، جب کہ رکاوٹیں 'اگر-اور' بیانات میں اقدار کا تعین کرتی ہیں۔
  • اس بات کا تعین کرنے میں وقت لگتا ہے کہ تبدیلی کہاں کرنے کی ضرورت ہے، 'اگر-اور' بیانات میں ترمیم کرنا مشکل ہے۔ دوسری طرف، 'سوئچ' بیانات کو اپ ڈیٹ کرنا آسان ہے کیونکہ ان میں آسانی سے ترمیم کی جا سکتی ہے۔
  • بہت سے تاثرات کو شامل کرنے کے لیے، ہم متعدد 'اگر-اور' بیانات استعمال کر سکتے ہیں۔

C++ لوپس:

اب، ہم دریافت کریں گے کہ C++ پروگرامنگ میں لوپس کو کیسے استعمال کیا جائے۔ کنٹرول ڈھانچہ جسے 'لوپ' کہا جاتا ہے بیانات کی ایک سیریز کو دہراتا ہے۔ دوسرے لفظوں میں اسے تکراری ساخت کہا جاتا ہے۔ تمام بیانات کو ترتیب وار ڈھانچے میں ایک ساتھ عمل میں لایا جاتا ہے۔ . دوسری طرف، مخصوص بیان پر منحصر ہے، حالت کا ڈھانچہ کسی اظہار کو انجام دے سکتا ہے یا چھوڑ سکتا ہے۔ مخصوص حالات میں ایک سے زیادہ بار بیان دینے کی ضرورت پڑ سکتی ہے۔

لوپ کی اقسام:

لوپس کی تین قسمیں ہیں:

لوپ کے لیے:

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

لوپ پر عمل درآمد کے لیے 'فور' کا نحو:

مثال:

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

  • ابتدائی اظہار: سب سے پہلے، ہمیں اس اظہار میں کسی بھی ابتدائی قدر پر لوپ کاؤنٹر سیٹ کرنے کی ضرورت ہے۔
  • ٹیسٹ اظہار : اب، ہمیں دیئے گئے اظہار میں دی گئی حالت کو جانچنے کی ضرورت ہے۔ اگر معیار کو پورا کیا جاتا ہے، تو ہم 'for' لوپ کی باڈی کو انجام دیں گے اور اظہار کو اپ ڈیٹ کرنا جاری رکھیں گے۔ اگر نہیں، تو ہمیں رکنا چاہیے۔
  • اظہار کو اپ ڈیٹ کریں: یہ اظہار لوپ کی باڈی کے مکمل ہونے کے بعد لوپ متغیر کو ایک خاص قدر سے بڑھاتا یا گھٹاتا ہے۔

'فور' لوپ کی توثیق کرنے کے لیے C++ پروگرام کی مثالیں:

مثال:

یہ مثال 0 سے 10 تک عددی اقدار کی پرنٹنگ کو ظاہر کرتی ہے۔

اس منظر نامے میں، ہمیں 0 سے 10 تک کے عدد کو پرنٹ کرنا ہے۔ سب سے پہلے، ہم نے ایک رینڈم متغیر i کو شروع کیا جس کی ایک ویلیو '0' دی گئی ہے اور پھر جو کنڈیشن پیرامیٹر ہم نے پہلے ہی استعمال کیا ہے وہ حالت کو چیک کرتا ہے اگر i<=10۔ اور جب یہ شرط کو پورا کر لیتا ہے اور یہ سچ ہو جاتا ہے، تو 'for' لوپ پر عمل درآمد شروع ہو جاتا ہے۔ عمل درآمد کے بعد، انکریمنٹ یا کمی کے دو پیرامیٹرز میں سے، ایک کو عمل میں لایا جائے گا اور جس میں جب تک مخصوص حالت i<=10 غلط نہیں ہو جاتی، متغیر i کی قدر بڑھ جاتی ہے۔

شرط i<10 کے ساتھ تکرار کی تعداد:

کی تعداد

تکرار

متغیرات میں <10 عمل
پہلا i=0 سچ ہے 0 ڈسپلے ہوتا ہے اور i کو 1 سے بڑھایا جاتا ہے۔
دوسرا i=1 سچ ہے 1 ڈسپلے ہوتا ہے اور i کو 2 سے بڑھایا جاتا ہے۔
تیسرے i=2 سچ ہے 2 ظاہر ہوتا ہے اور i کو 3 سے بڑھایا جاتا ہے۔
چوتھا i=3 سچ ہے 3 ظاہر ہوتا ہے اور i کو 4 سے بڑھایا جاتا ہے۔
پانچواں i=4 سچ ہے 4 ڈسپلے ہوتا ہے اور i کو 5 سے بڑھایا جاتا ہے۔
چھٹا i=5 سچ ہے 5 ظاہر ہوتا ہے اور i کو 6 سے بڑھایا جاتا ہے۔
ساتواں i=6 سچ ہے 6 ظاہر ہوتا ہے اور i کو 7 سے بڑھایا جاتا ہے۔
آٹھواں i=7 سچ ہے 7 ظاہر ہوتا ہے اور i کو 8 سے بڑھایا جاتا ہے۔
نویں i=8 سچ ہے 8 ظاہر ہوتا ہے اور i کو 9 سے بڑھایا جاتا ہے۔
دسویں i=9 سچ ہے 9 ظاہر ہوتا ہے اور i کو 10 سے بڑھایا جاتا ہے۔
گیارہویں i=10 سچ ہے 10 ڈسپلے ہوتا ہے اور i کو 11 سے بڑھایا جاتا ہے۔
بارھواں i=11 جھوٹا لوپ ختم ہو گیا ہے۔

مثال:

درج ذیل مثال انٹیجر کی قدر کو ظاہر کرتی ہے:

مذکورہ صورت میں، 'a' نامی ایک متغیر کو 50 دی گئی قدر کے ساتھ شروع کیا جاتا ہے۔ ایک شرط لاگو ہوتی ہے جہاں متغیر 'a' 70 سے کم ہو۔ پھر، 'a' کی قدر کو اس طرح اپ ڈیٹ کیا جاتا ہے کہ اس کے ساتھ جوڑا جاتا ہے۔ 2. پھر 'a' کی قدر ایک ابتدائی قدر سے شروع کی جاتی ہے جو 50 تھی اور 2 کو پورے لوپ میں اس وقت تک شامل کیا جاتا ہے جب تک کہ کنڈیشن غلط نہیں ہو جاتی اور 'a' کی قدر 70 سے بڑھ جاتی ہے اور لوپ ختم ہو جاتا ہے۔

تکرار کی تعداد:

کی تعداد

تکرار

متغیر a=50 عمل
پہلا a=50 سچ ہے a کی قدر کو مزید دو عدد انٹیجرز جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 50 52 ہو جاتا ہے۔
دوسرا a=52 سچ ہے a کی قدر کو مزید دو عدد انٹیجرز جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 52 54 بن جاتا ہے۔
تیسرے a=54 سچ ہے a کی قدر دو مزید عدد کو جوڑ کر اپ ڈیٹ کی جاتی ہے اور 54 بنتا ہے 56
چوتھا a=56 سچ ہے a کی قدر کو مزید دو عدد عدد جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 56 بنتا ہے 58
پانچواں a=58 سچ ہے a کی قدر کو مزید دو عدد انٹیجرز جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 58 بنتا ہے 60
چھٹا a=60 سچ ہے a کی قدر کو مزید دو عدد عدد جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 60 62 ہو جاتا ہے۔
ساتواں a=62 سچ ہے a کی قدر کو مزید دو عدد انٹیجرز جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 62 64 بن جاتا ہے۔
آٹھواں a=64 سچ ہے a کی قدر دو مزید عدد کو جوڑ کر اپ ڈیٹ کی جاتی ہے اور 64 66 بن جاتا ہے۔
نویں a=66 سچ ہے a کی قدر کو مزید دو عدد عدد جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 66 68 بن جاتا ہے۔
دسویں a=68 سچ ہے a کی قدر کو مزید دو عدد عدد جوڑ کر اپ ڈیٹ کیا جاتا ہے اور 68 بنتا ہے 70
گیارہویں a=70 جھوٹا لوپ ختم ہو گیا ہے۔

جبکہ لوپ:

جب تک بیان کردہ شرط پوری نہیں ہو جاتی، ایک یا زیادہ بیانات پر عمل درآمد کیا جا سکتا ہے۔ جب تکرار پہلے سے معلوم نہ ہو تو یہ بہت مفید ہے۔ سب سے پہلے، حالت کی جانچ پڑتال کی جاتی ہے اور پھر بیان پر عمل کرنے یا لاگو کرنے کے لئے لوپ کے جسم میں داخل ہوتا ہے.

پہلی سطر میں، ہم ہیڈر فائل اور معیاری نام کی جگہ کو شامل کرتے ہیں۔ ہم کال کرتے ہیں مرکزی() فنکشن یہاں، ہم ایک متغیر 'a' کو شروع کرتے ہیں۔ اگلی سطر میں، ہم جبکہ حالت کا اطلاق کرتے ہیں۔ جبکہ حالت کے اندر، ہم لکھی ہوئی قدر کو ظاہر کرنے کے لیے 'cout' اسٹیٹمنٹ استعمال کرتے ہیں۔ پھر، ہم تعداد بڑھانے کے لیے انکریمنٹ آپریٹر کا استعمال کرتے ہیں۔ آخری لائن میں، ہم پروگرام کو ختم کرنے کے لیے 'return 0' اسٹیٹمنٹ کا استعمال کرتے ہیں۔

Do-While لوپ:

جب متعین شرط پوری ہو جاتی ہے تو بیانات کا ایک سلسلہ چلایا جاتا ہے۔ سب سے پہلے، لوپ کا جسم کیا جاتا ہے. اس کے بعد شرط کی جانچ کی جاتی ہے کہ یہ صحیح ہے یا نہیں۔ لہذا، بیان ایک بار پھانسی دی جاتی ہے. حالت کا جائزہ لینے سے پہلے لوپ کی باڈی کو 'Do-while' لوپ میں پروسیس کیا جاتا ہے۔ جب بھی مطلوبہ شرط پوری ہوتی ہے پروگرام چلتا ہے۔ دوسری صورت میں، جب شرط غلط ہے، پروگرام ختم ہوجاتا ہے.

یہاں، ہم ہیڈر فائل کو مربوط کرتے ہیں۔ ہم استعمال کرتے ہیں۔ مرکزی() پروگرام میں فنکشن. پھر، ہم چار عدد کو شروع کرتے ہیں اور 'cin' بیان استعمال کرتے ہیں، تاکہ صارف قدر درج کر سکے۔ اگلی لائن میں، ہم دو مختلف انٹیجرز کو شروع کرتے ہیں۔ ہم 'ڈو' بیان کا اطلاق کرتے ہیں۔ بیان کے اندر، ہم ریاضی کے دو افعال استعمال کرتے ہیں۔ سب سے پہلے، ہم ملٹی پلائی آپریٹر کا استعمال کرتے ہیں اور دوسرا، ہم اضافی آپریٹر کا استعمال کرتے ہیں۔ پھر، ہم پروگرام میں 'do' اسٹیٹمنٹ سے باہر 'while' شرط لگاتے ہیں۔ مزید، ہم 'نتیجہ' انٹیجر کے ذریعے نتیجہ پرنٹ کرنے کے لیے 'cout' اسٹیٹمنٹ شامل کرتے ہیں۔ آخری لائن میں، پروگرام کو ختم کرنے کے لیے، ہم واپسی 0 کمانڈ استعمال کرتے ہیں۔

C++ جاری رکھیں/بریک کریں:

C++ جاری بیان:

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

لوپ کے ساتھ:

اس مثال میں، ہم کچھ مخصوص تقاضوں کو پاس کرتے ہوئے مطلوبہ نتیجہ حاصل کرنے کے لیے C++ سے جاری بیان کے ساتھ 'for loop' کا استعمال کرتے ہیں۔

ہم لائبریری کو شامل کرکے اور 'namespace std' استعمال کرکے شروع کرتے ہیں۔ پھر ہم کال کر رہے ہیں۔ مرکزی() فنکشن ہم لوپ کے لیے استعمال کرتے ہیں۔ لوپ کے اندر، ہم ایک متغیر 'k' کا اعلان کرتے ہیں جو 3 اور 8 کے درمیان سمجھا جاتا ہے۔ ہم تکرار جاری رکھنے کے لیے ایک شرط کا استعمال کرتے ہیں چاہے (k = = 5)۔ پھر شرط بتانے کے بعد 'جاری' بیان استعمال کیا۔ آخر میں. آؤٹ پٹ دکھانے کے لیے، ہم 'cout' کمانڈ کے ساتھ 'return 0' کمانڈ استعمال کرتے ہیں۔

تھوڑی دیر کے لوپ کے ساتھ:

اس پورے مظاہرے کے دوران، ہم نے 'while loop' اور C++ 'continue' بیان دونوں کا استعمال کیا جس میں کچھ شرائط بھی شامل ہیں تاکہ یہ معلوم کیا جا سکے کہ کس قسم کی آؤٹ پٹ پیدا ہو سکتی ہے۔

اس مثال میں، ہم نے صرف 40 میں نمبر شامل کرنے کی شرط رکھی ہے۔ اگر درج کیا گیا عدد منفی نمبر ہے، تو 'جبکہ' لوپ ختم ہو جائے گا۔ دوسری طرف، اگر تعداد 40 سے زیادہ ہے، تو وہ مخصوص نمبر تکرار سے چھوٹ جائے گا۔

ہم 'namespace std' کا استعمال کرتے ہوئے لائبریری کو شامل کریں گے اور پھر کال کریں گے۔ مرکزی() فنکشن ہم ایک متغیر 's' کو شروع کرتے ہیں۔ اگلے مرحلے میں ایک اور متغیر 'نمبر' کا اعلان کیا گیا ہے۔ ہم 'while' لوپ استعمال کرتے ہیں۔ اب، ہم اس شرط کی وضاحت کرتے ہیں کہ مطلوبہ قدر صفر سے اوپر یا اس کے برابر ہوگی۔ تمام مثبت نمبروں کو شامل کرنے کے لیے، ہم 's += نمبر' بیان کا استعمال کرتے ہیں۔ 'cout' کمانڈ کا اطلاق کنسول پر پیغام دکھانے کے لیے کیا جائے گا 'کوئی بھی نمبر درج کریں'۔ ہم 'cin' بیان کو استعمال کرکے صارف سے عدد حاصل کرتے ہیں۔ ہم 'اگر' بیان بھی استعمال کرتے ہیں۔ جب بھی متعین نمبر 40 سے زیادہ ہوگا، پیغام دکھایا جائے گا۔ پھر، ہم نے 'جاری' کمانڈ استعمال کیا۔ ان تمام مراحل کے بعد، 'جاری' بیان پر عمل درآمد کیا جائے گا۔ تمام نمبروں کا مجموعہ دکھانے کے لیے، ہم 'cout' بیان کا استعمال کرتے ہیں۔

C++ وقفے کا بیان:

جب بھی بریک اسٹیٹمنٹ کو C++ میں لوپ میں استعمال کیا جاتا ہے، لوپ فوری طور پر ختم ہوجاتا ہے اور ساتھ ہی پروگرام کنٹرول لوپ کے بعد اسٹیٹمنٹ پر دوبارہ شروع ہوجاتا ہے۔ 'سوئچ' بیان کے اندر کیس کو ختم کرنا بھی ممکن ہے۔

لوپ کے ساتھ:

یہاں، ہم مختلف اقدار پر تکرار کرکے آؤٹ پٹ کا مشاہدہ کرنے کے لیے 'بریک' اسٹیٹمنٹ کے ساتھ 'for' لوپ کا استعمال کریں گے۔

سب سے پہلے، ہم ایک ہیڈر فائل شامل کرتے ہیں۔ اگلا، ہم 'namespace std' استعمال کرتے ہیں۔ main() فنکشن کو کال کرنے کے بعد، ہم نے لوپ کے لیے استعمال کیا۔ یہاں، ہم متغیر 'm' کو شروع کریں گے۔ ہم اس شرط کو لاگو کریں گے کہ 'm' کی قدر 10 اور 20 کے درمیان ہے۔ 'بریک' شرط اس طرح عمل میں لائی جائے گی جیسے (m == 17)۔ نتیجہ پرنٹ کرنے کے لیے، ہم نے 'cout' کا استعمال کیا۔ اس کے بعد، 'return 0' کمانڈ کا اطلاق ہوگا۔

تھوڑی دیر کے لوپ کے ساتھ:

ہم بریک سٹیٹمنٹ کے ساتھ ساتھ 'while' لوپ کو استعمال کرنے جا رہے ہیں۔

ہم لائبریری کو درآمد کرکے شروع کرتے ہیں۔ 'نیم اسپیس std' کو شامل کیا جائے گا۔ مین () طریقہ کے اندر، دو متغیرات 'nbr' اور 'x' شروع کیے جائیں گے۔ ہم نے بطور دلیل 'while' لوپ اور پاس 'true' کا استعمال کیا۔ صارف سے قدر حاصل کرنے کے لیے، ہم 'cin' کمانڈ استعمال کرتے ہیں۔ اگلا، ہم نے 'اگر' بیان استعمال کیا۔ اس کے ساتھ، 'بریک' شرط کا اطلاق شرط بتانے کے لیے کیا جاتا ہے اگر (nbr <0)۔ تمام مثبت اقدار کو شامل کرنے کے لیے، ہم نے 'x += nbr' فارمولے کا استعمال کیا۔ اس رقم کو ظاہر کرنے کے لیے، ہم نے 'cout' بیان شامل کیا۔

C++ افعال:

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

فنکشن کی تخلیق:

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

نحو:

باطل محنت ( )

{

// فنکشن کا باڈی

}

باطل فنکشن کی واپسی کی قسم ہے۔ لیبر اس کو دیا گیا نام ہے اور گھوبگھرالی بریکٹ اس فنکشن کے جسم کو گھیرے گا جہاں ہم عملدرآمد کے لیے کوڈ شامل کرتے ہیں۔

فنکشن کو کال کرنا:

کوڈ میں اعلان کردہ فنکشن صرف اس وقت عمل میں آتے ہیں جب ان کو پکارا جاتا ہے۔ کسی فنکشن کو کال کرنے کے لیے، آپ کو قوسین کے ساتھ فنکشن کا نام بتانا ہوگا جس کے بعد سیمی کالون '؛' ہے۔

مثال:

آئیے اس صورتحال میں صارف کی طرف سے طے شدہ فنکشن کا اعلان اور تعمیر کریں۔

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

یہ سادہ پیغام ہے جس کی وضاحت صارف کی طرف سے طے شدہ فنکشن میں کی گئی ہے۔ مرکزی() فنکشن

باطل:

مذکورہ بالا مثال میں، ہم نے دیکھا کہ صارف کی طرف سے طے شدہ فنکشن کی واپسی کی قسم باطل ہے۔ اس سے ظاہر ہوتا ہے کہ فنکشن کے ذریعہ کوئی قدر واپس نہیں کی جارہی ہے۔ یہ ظاہر کرتا ہے کہ قدر موجود نہیں ہے یا شاید کالعدم ہے۔ کیونکہ جب بھی کوئی فنکشن صرف پیغامات کو پرنٹ کر رہا ہوتا ہے تو اسے کسی واپسی کی قدر کی ضرورت نہیں ہوتی۔

اس void کو اسی طرح فنکشن کے پیرامیٹر اسپیس میں واضح طور پر بتانے کے لیے استعمال کیا جاتا ہے کہ یہ فنکشن بلانے کے دوران کوئی اصل قیمت نہیں لیتا ہے۔ مندرجہ بالا صورت حال میں، ہم بھی کال کریں گے مزدور() فنکشن کے طور پر:

بے کار محنت ( باطل )

{

کاؤٹ << 'ایک مزدور عزت کا مستحق ہے۔ ! ' ;

}

اصل پیرامیٹرز:

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

مثال:

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

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

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

C++ پوائنٹرز:

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

  • ایک فنکشن کو دوسرے میں منتقل کرنا۔
  • ڈھیر پر نئی اشیاء مختص کرنے کے لیے۔
  • ایک صف میں عناصر کی تکرار کے لیے

عام طور پر، '&' (ایمپرسینڈ) آپریٹر کو میموری میں کسی بھی چیز کے ایڈریس تک رسائی حاصل کرنے کے لیے استعمال کیا جاتا ہے۔

اشارے اور ان کی اقسام:

پوائنٹر کی کئی اقسام ہیں:

  • کالعدم اشارے: یہ پوائنٹر ہیں جن کی قدر صفر کی C++ لائبریریوں میں محفوظ ہے۔
  • ریاضی کا اشارہ: اس میں چار بڑے ریاضی کے آپریٹرز شامل ہیں جو قابل رسائی ہیں جو ++, –, +, - ہیں۔
  • اشارے کی ایک صف: وہ صفیں ہیں جو کچھ پوائنٹرز کو ذخیرہ کرنے کے لیے استعمال ہوتی ہیں۔
  • پوائنٹر ٹو پوائنٹر: یہ وہ جگہ ہے جہاں ایک پوائنٹر پر پوائنٹر استعمال ہوتا ہے۔

مثال:

آنے والی مثال پر غور کریں جس میں چند متغیرات کے ایڈریس پرنٹ کیے گئے ہیں۔

ہیڈر فائل اور معیاری نام کی جگہ کو شامل کرنے کے بعد، ہم دو متغیرات شروع کر رہے ہیں۔ ایک انٹیجر ویلیو ہے جس کی نمائندگی i' سے ہوتی ہے اور دوسرا 10 حروف کے سائز کے ساتھ کریکٹر ٹائپ اری 'I' ہے۔ دونوں متغیرات کے پتے پھر 'cout' کمانڈ استعمال کرکے دکھائے جاتے ہیں۔

ہمیں جو آؤٹ پٹ موصول ہوا ہے وہ ذیل میں دکھایا گیا ہے:

یہ نتیجہ دونوں متغیرات کا پتہ دکھاتا ہے۔

دوسری طرف، ایک پوائنٹر کو ایک متغیر سمجھا جاتا ہے جس کی قدر خود ایک مختلف متغیر کا پتہ ہے۔ ایک پوائنٹر ہمیشہ ڈیٹا ٹائپ کی طرف اشارہ کرتا ہے جس میں وہی قسم ہوتی ہے جو (*) آپریٹر کے ساتھ بنائی جاتی ہے۔

اشارے کا اعلان:

پوائنٹر کا اعلان اس طرح کیا گیا ہے:

قسم * تھا - نام ;

پوائنٹر کی بنیادی قسم 'قسم' سے ظاہر ہوتی ہے، جبکہ پوائنٹر کا نام 'var-name' سے ظاہر ہوتا ہے۔ اور ایک متغیر کو پوائنٹر نجمہ (*) کے حقدار بنانے کے لیے استعمال کیا جاتا ہے۔

متغیرات کو پوائنٹرز تفویض کرنے کے طریقے:

انٹر * pi ; // انٹیجر ڈیٹا ٹائپ کا پوائنٹر

دگنا * pd ; // ڈبل ڈیٹا ٹائپ کا پوائنٹر

تیرنا * pf ; // فلوٹ ڈیٹا ٹائپ کا پوائنٹر

چار * پی سی ; // چار ڈیٹا ٹائپ کا پوائنٹر

تقریباً ہمیشہ ہی ایک لمبا ہیکسا ڈیسیمل نمبر ہوتا ہے جو میموری ایڈریس کی نمائندگی کرتا ہے جو ابتدائی طور پر تمام پوائنٹرز کے لیے ان کے ڈیٹا ٹائپ سے قطع نظر ایک جیسا ہوتا ہے۔

مثال:

مندرجہ ذیل مثال یہ ظاہر کرے گی کہ کس طرح پوائنٹرز '&' آپریٹر کو تبدیل کرتے ہیں اور متغیرات کا پتہ محفوظ کرتے ہیں۔

ہم لائبریریوں اور ڈائریکٹریوں کی مدد کو مربوط کرنے جا رہے ہیں۔ پھر، ہم درخواست کریں گے مرکزی() فنکشن جہاں ہم سب سے پہلے ویلیو 55 کے ساتھ 'int' قسم کے متغیر 'n' کا اعلان کرتے ہیں اور شروع کرتے ہیں۔ اگلی لائن میں، ہم 'p1' نامی ایک پوائنٹر ویری ایبل شروع کر رہے ہیں۔ اس کے بعد، ہم 'n' متغیر کا پتہ پوائنٹر 'p1' کو تفویض کرتے ہیں اور پھر ہم متغیر 'n' کی قدر ظاہر کرتے ہیں۔ 'n' کا پتہ جو 'p1' پوائنٹر میں محفوظ ہے ظاہر ہوتا ہے۔ اس کے بعد، '*p1' کی قدر 'cout' کمانڈ کو استعمال کرکے اسکرین پر پرنٹ کی جاتی ہے۔ آؤٹ پٹ مندرجہ ذیل ہے:

یہاں، ہم دیکھتے ہیں کہ 'n' کی قدر 55 ہے اور 'n' کا ایڈریس جو پوائنٹر 'p1' میں محفوظ تھا 0x6ffe14 دکھایا گیا ہے۔ پوائنٹر ویری ایبل کی ویلیو ملی ہے اور یہ 55 ہے جو کہ انٹیجر ویری ایبل کی ویلیو کے برابر ہے۔ لہذا، ایک پوائنٹر متغیر کے ایڈریس کو اسٹور کرتا ہے، اور *پوائنٹر بھی، انٹیجر کی قدر ذخیرہ کرتا ہے جس کے نتیجے میں ابتدائی طور پر ذخیرہ شدہ متغیر کی قدر واپس آجائے گی۔

مثال:

آئیے ایک اور مثال پر غور کریں جہاں ہم ایک پوائنٹر استعمال کر رہے ہیں جو سٹرنگ کا پتہ محفوظ کرتا ہے۔

اس کوڈ میں، ہم سب سے پہلے لائبریریوں اور نام کی جگہ شامل کر رہے ہیں۔ میں مرکزی() فنکشن ہمیں 'میک اپ' نامی اسٹرنگ کا اعلان کرنا ہے جس میں 'کاجل' کی قدر ہے۔ ایک سٹرنگ ٹائپ پوائنٹر '*p2' میک اپ متغیر کے ایڈریس کو اسٹور کرنے کے لیے استعمال کیا جاتا ہے۔ متغیر 'میک اپ' کی قدر پھر 'cout' بیان کو استعمال کرتے ہوئے اسکرین پر ظاہر ہوتی ہے۔ اس کے بعد، متغیر 'میک اپ' کا ایڈریس پرنٹ کیا جاتا ہے، اور آخر میں، پوائنٹر ویری ایبل 'p2' ظاہر ہوتا ہے جو پوائنٹر کے ساتھ 'میک اپ' متغیر کا میموری ایڈریس دکھاتا ہے۔

مندرجہ بالا کوڈ سے حاصل کردہ آؤٹ پٹ اس طرح ہے:

پہلی لائن میں 'میک اپ' متغیر کی قدر دکھائی گئی ہے۔ دوسری لائن متغیر 'میک اپ' کا پتہ دکھاتی ہے۔ آخری لائن میں، پوائنٹر کے استعمال کے ساتھ 'میک اپ' متغیر کا میموری ایڈریس دکھایا گیا ہے۔

C++ میموری کا انتظام:

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

C++ میں میموری کی متحرک مختص اور ڈیلوکیشن کے لیے، ہم کرتے ہیں ' نئی' اور 'حذف کریں' آپریشنز میموری کو منظم کرنا ضروری ہے تاکہ کوئی میموری ضائع نہ ہو۔ میموری کی تقسیم آسان اور مؤثر ہو جاتا ہے. کسی بھی C++ پروگرام میں، میموری کو دو پہلوؤں میں سے کسی ایک میں استعمال کیا جاتا ہے: یا تو ہیپ یا اسٹیک کے طور پر۔

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

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

C++ نیا آپریٹر:

نیا آپریٹر میموری کی تخصیص کے لیے ذمہ دار ہے اور اسے اس طرح استعمال کیا جاتا ہے:

اس کوڈ میں، ہم لائبریری اور نام کی جگہ شامل کرتے ہیں۔ پھر، ہم نے 'int' ڈیٹا ٹائپ کے ساتھ ایک پوائنٹر شروع کیا۔ اگلی لائن میں، اس پوائنٹر کو 'نیا' آپریٹر الاٹ کیا جاتا ہے۔

پوائنٹر کے استعمال کے ساتھ میموری کو 'int' متغیر کو کامیابی کے ساتھ مختص کیا گیا ہے۔

C++ ڈیلیٹ آپریٹر:

جب بھی ہم کسی متغیر کا استعمال کرتے ہیں، تو ہمیں اس میموری کو ڈیلوکیٹ کرنا چاہیے جسے ہم نے ایک بار مختص کیا تھا کیونکہ یہ اب استعمال میں نہیں ہے۔ اس کے لیے، ہم میموری کو جاری کرنے کے لیے 'ڈیلیٹ' آپریٹر کا استعمال کرتے ہیں۔

جس مثال کا ہم ابھی جائزہ لینے جارہے ہیں اس میں دونوں آپریٹرز شامل ہیں۔

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

میموری ایلوکیشن کے لیے صف کا استعمال:

اب، ہم یہ دیکھنے جا رہے ہیں کہ صفوں کو استعمال کرتے ہوئے 'نئے' اور 'ڈیلیٹ' آپریٹرز کو کس طرح استعمال کیا جاتا ہے۔ ڈائنامک ایلوکیشن اسی طرح ہوتا ہے جیسا کہ متغیرات کے لیے ہوتا ہے کیونکہ نحو تقریباً ایک جیسا ہوتا ہے۔

دی گئی مثال میں، ہم عناصر کی صف پر غور کر رہے ہیں جن کی قدر صارف سے لی گئی ہے۔ صف کے عناصر لیے جاتے ہیں اور پوائنٹر متغیر کا اعلان کیا جاتا ہے اور پھر میموری کو مختص کیا جاتا ہے۔ میموری مختص کرنے کے فوراً بعد، سرنی عناصر کا ان پٹ طریقہ کار شروع ہو جاتا ہے۔ اگلا، سرنی عناصر کے لیے آؤٹ پٹ کو 'for' لوپ استعمال کرکے دکھایا جاتا ہے۔ اس لوپ میں عناصر کی تکرار کی حالت ہے جس کا سائز سرنی کے اصل سائز سے کم ہے جس کی نمائندگی n سے ہوتی ہے۔

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

آؤٹ پٹ میں، ہم دو بار پرنٹ شدہ اقدار کے سیٹ دیکھ سکتے ہیں۔ پہلا 'فور' لوپ عناصر کی قدروں کو لکھنے کے لیے استعمال کیا جاتا تھا اور دوسرا 'فور' لوپ پہلے سے لکھی ہوئی اقدار کی پرنٹنگ کے لیے استعمال ہوتا ہے جس سے یہ ظاہر ہوتا ہے کہ صارف نے ان اقدار کو وضاحت کے لیے لکھا ہے۔

فوائد:

C++ پروگرامنگ لینگویج میں 'نیا' اور 'ڈیلیٹ' آپریٹر کو ہمیشہ ترجیح دی جاتی ہے اور بڑے پیمانے پر استعمال کیا جاتا ہے۔ مکمل بحث اور تفہیم کے بعد، یہ نوٹ کیا جاتا ہے کہ 'نئے' آپریٹر کے بہت زیادہ فوائد ہیں۔ میموری کو مختص کرنے کے لیے 'نئے' آپریٹر کے فوائد درج ذیل ہیں:

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

C++ Arrays:

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

صفوں کا اعلان:

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

مثال کے طور پر:

سٹرنگ میک اپ [ 5 ] ;

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

مثال کے طور پر:

سٹرنگ میک اپ [ 5 ] = { 'کاجل' ، 'رنگ' ، 'لِپ اسٹک' ، 'فاؤنڈیشن' ، 'پہلا' } ;

اسی طرح، اگر آپ محسوس کرتے ہیں کہ ایک مختلف ڈیٹا ٹائپ کے ساتھ ایک اور صف بنانا ہے جسے 'int' سمجھا جاتا ہے، تو طریقہ کار وہی ہوگا جو آپ کو صرف متغیر کی ڈیٹا کی قسم کو تبدیل کرنے کی ضرورت ہے جیسا کہ ذیل میں دکھایا گیا ہے:

int متعدد [ 5 ] = { دو ، 4 ، 6 ، 8 ، 10 } ;

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

صف میں عناصر تک کیسے رسائی حاصل کریں؟

صف میں شامل تمام عناصر کو ایک الگ نمبر کے ساتھ تفویض کیا گیا ہے جو کہ ان کا انڈیکس نمبر ہے جو سرنی سے کسی عنصر تک رسائی کے لیے استعمال ہوتا ہے۔ انڈیکس کی قدر 0 سے شروع ہوتی ہے جب تک کہ صف کے سائز سے ایک کم نہ ہو۔ پہلی ہی قدر کی اشاریہ قیمت 0 ہے۔

مثال:

ایک بہت ہی بنیادی اور آسان مثال پر غور کریں جس میں ہم ایک صف میں متغیرات کو شروع کریں گے۔

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

یہ مندرجہ بالا کوڈ سے حاصل کردہ نتیجہ ہے۔ 'endl' کلیدی لفظ دوسرے آئٹم کو خود بخود اگلی لائن میں لے جاتا ہے۔

مثال:

اس کوڈ میں، ہم ایک صف کی اشیاء کو پرنٹ کرنے کے لیے 'for' لوپ استعمال کر رہے ہیں۔

مندرجہ بالا مثال میں، ہم ضروری لائبریری کو شامل کر رہے ہیں۔ معیاری نام کی جگہ شامل کی جا رہی ہے۔ دی مرکزی() فنکشن وہ فنکشن ہے جہاں ہم کسی خاص پروگرام کو انجام دینے کے لیے تمام افعال انجام دینے جا رہے ہیں۔ اس کے بعد، ہم 'Num' کے نام سے ایک int قسم کی اری کا اعلان کر رہے ہیں، جس کا سائز 10 ہے۔ ان دس ویری ایبلز کی ویلیو 'for' لوپ کے استعمال کے ساتھ صارف سے لی جاتی ہے۔ اس صف کے ڈسپلے کے لیے، ایک 'فور' لوپ دوبارہ استعمال کیا جاتا ہے۔ صف میں محفوظ کردہ 10 عدد کو 'cout' اسٹیٹمنٹ کی مدد سے ظاہر کیا جاتا ہے۔

یہ وہ آؤٹ پٹ ہے جو ہمیں مندرجہ بالا کوڈ کے نفاذ سے حاصل ہوا ہے، جس میں 10 انٹیجرز کی مختلف قدریں ہیں۔

مثال:

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

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

یہ حتمی آؤٹ پٹ ہے جہاں ہر مضمون کے لیے صارف سے انفرادی طور پر اسکور لیے جاتے ہیں اور بالترتیب اوسط اور فیصد کا حساب لگایا جاتا ہے۔

Arrays کے استعمال کے فوائد:

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

Arrays کے استعمال کے نقصانات:

  • صفوں کا ایک مقررہ سائز ہوتا ہے۔
  • ارے یکساں ہیں جس کا مطلب ہے کہ صرف ایک قسم کی قدر کو ذخیرہ کیا جاتا ہے۔
  • صفیں فزیکل میموری میں ڈیٹا کو انفرادی طور پر اسٹور کرتی ہیں۔
  • اندراج اور حذف کرنے کا عمل صفوں کے لیے آسان نہیں ہے۔

C++ آبجیکٹ اور کلاسز:

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



دوسرے لفظوں میں کلاس ایک خاکہ یا ڈیزائن ہے جو ڈیٹا ممبروں کی تعریف اور اعلان اور ان ڈیٹا ممبروں کو تفویض کردہ افعال کے لیے ذمہ دار ہے۔ کلاس میں اعلان کردہ اشیاء میں سے ہر ایک کلاس کی طرف سے ظاہر کردہ تمام خصوصیات یا افعال کا اشتراک کرنے کے قابل ہو جائے گا.

فرض کریں کہ پرندوں کا ایک طبقہ ہے، اب شروع میں تمام پرندے اڑ سکتے ہیں اور ان کے پر ہیں۔ لہٰذا، اڑنا ایک ایسا رویہ ہے جسے یہ پرندے اپناتے ہیں اور پنکھ ان کے جسم کا حصہ یا بنیادی خصوصیت ہیں۔







کلاس کی تعریف:

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





کلاس کا نامOfClass

{

رسائی کی وضاحت کنندہ :

ڈیٹا ممبرز ;

ڈیٹا ممبر کے افعال ( ) ;

} ;

اشیاء کا اعلان کرنا:

کلاس کی وضاحت کرنے کے فوراً بعد، ہمیں کلاس کی طرف سے مخصوص کردہ فنکشنز تک رسائی اور وضاحت کرنے کے لیے اشیاء بنانے کی ضرورت ہے۔ اس کے لیے ہمیں کلاس کا نام اور پھر اعلان کے لیے اعتراض کا نام لکھنا ہوگا۔



ڈیٹا ممبرز تک رسائی:

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











مثال:

اس مثال میں، ہم چند فنکشنز کی وضاحت کرنے جا رہے ہیں اور اشیاء کی مدد سے کلاس فنکشنز اور ڈیٹا ممبرز تک رسائی حاصل کریں گے۔



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

یہ وہ آؤٹ پٹ ہے جب صارف خود گاڑی کے لیے نام دیتا ہے اور نمبر پلیٹیں اس کو تفویض کردہ جامد قدر ہوتی ہیں۔

ممبر کے افعال کی تعریف کے بارے میں بات کرتے ہوئے، کسی کو یہ سمجھنا چاہیے کہ کلاس کے اندر فنکشن کی وضاحت کرنا ہمیشہ لازمی نہیں ہوتا ہے۔ جیسا کہ آپ مندرجہ بالا مثال میں دیکھ سکتے ہیں، ہم کلاس کے باہر کلاس کے فنکشن کی وضاحت کر رہے ہیں کیونکہ ڈیٹا ممبرز کا عوامی طور پر اعلان کیا جاتا ہے اور یہ اسکوپ ریزولوشن آپریٹر کی مدد سے کیا جاتا ہے جسے '::' کے نام کے ساتھ دکھایا گیا ہے۔ کلاس اور فنکشن کا نام۔

C++ کنسٹرکٹرز اور ڈسٹرکٹرز:

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

تعمیر کنندگان:

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

نحو:

NameOfTheClass ( )
{
// کنسٹرکٹر کا جسم
}

کنسٹرکٹرز کی اقسام:

پیرامیٹرائزڈ کنسٹرکٹر:

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

مثال:

اس مثال میں، ہم کلاس کا کنسٹرکٹر بنائیں گے اور پیرامیٹرز کا اعلان کریں گے۔

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

عددی اقدار کو آؤٹ پٹ کے طور پر اسکرین پر پیش کیا جاتا ہے۔

کاپی کنسٹرکٹر:

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

مثال:

اس صورت میں، کاپی کنسٹرکٹر کا اعلان کیا جائے گا۔

سب سے پہلے، ہم لائبریری اور ڈائریکٹری کو مربوط کر رہے ہیں۔ 'نیو' کے نام سے ایک کلاس کا اعلان کیا جاتا ہے جس میں انٹیجرز کو 'ای' اور 'او' کے طور پر شروع کیا جاتا ہے۔ کنسٹرکٹر کو پبلک کیا جاتا ہے جہاں دو متغیرات کو قدریں تفویض کی جاتی ہیں اور ان متغیرات کا اعلان کلاس میں کیا جاتا ہے۔ پھر، یہ اقدار کی مدد سے ظاہر ہوتے ہیں مرکزی() واپسی کی قسم کے طور پر 'int' کے ساتھ فنکشن۔ دی ڈسپلے() فنکشن کو کال کیا جاتا ہے اور بعد میں اس کی وضاحت کی جاتی ہے جہاں نمبرز اسکرین پر ظاہر ہوتے ہیں۔ کے اندر مرکزی() فنکشن، اشیاء بنائے جاتے ہیں اور ان تفویض کردہ اشیاء کو بے ترتیب اقدار کے ساتھ شروع کیا جاتا ہے اور پھر ڈسپلے() طریقہ استعمال کیا جاتا ہے۔

کاپی کنسٹرکٹر کے استعمال سے حاصل کردہ آؤٹ پٹ ذیل میں ظاہر کیا گیا ہے۔

تباہ کن:

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

نحو:

~ نیا ( )
{
}

تباہ کن کسی دلائل کو قبول نہیں کرتا ہے اور اس کی واپسی کی قیمت بھی نہیں ہے۔ کمپائلر کلین اپ اسٹوریج کے لیے پروگرام سے باہر نکلنے کی واضح طور پر اپیل کرتا ہے جو اب قابل رسائی نہیں ہے۔

مثال:

اس منظر نامے میں، ہم کسی چیز کو ڈیلیٹ کرنے کے لیے ڈسٹرکٹر کا استعمال کر رہے ہیں۔

یہاں ایک 'شوز' کلاس بنائی گئی ہے۔ ایک کنسٹرکٹر بنایا گیا ہے جس کا نام کلاس جیسا ہے۔ کنسٹرکٹر میں، ایک پیغام ظاہر ہوتا ہے جہاں آبجیکٹ بنایا گیا ہے۔ کنسٹرکٹر کے بعد، ڈسٹرکٹر بنایا جاتا ہے جو کنسٹرکٹر کے ساتھ بنائی گئی اشیاء کو ڈیلیٹ کر رہا ہے۔ میں مرکزی() فنکشن، ایک پوائنٹر آبجیکٹ بنایا جاتا ہے جس کا نام 's' ہوتا ہے اور اس آبجیکٹ کو ڈیلیٹ کرنے کے لیے کلیدی لفظ 'delete' استعمال کیا جاتا ہے۔

یہ وہ آؤٹ پٹ ہے جو ہمیں پروگرام سے موصول ہوا ہے جہاں ڈسٹرکٹر تخلیق کردہ آبجیکٹ کو صاف اور تباہ کر رہا ہے۔

کنسٹرکٹرز اور ڈسٹرکٹرز کے درمیان فرق:

کنسٹرکٹرز تباہ کن
کلاس کی مثال بناتا ہے۔ کلاس کی مثال کو تباہ کرتا ہے۔
اس میں کلاس کے نام کے ساتھ دلائل ہیں۔ اس میں کوئی دلیل یا پیرامیٹرز نہیں ہیں۔
جب اعتراض پیدا ہوتا ہے تو اسے کہا جاتا ہے۔ جب چیز تباہ ہو جاتی ہے تو اسے کہا جاتا ہے۔
میموری کو اشیاء کو مختص کرتا ہے۔ اشیاء کی یادداشت کو ختم کرتا ہے۔
اوور لوڈ کیا جا سکتا ہے۔ اوورلوڈ نہیں کیا جا سکتا۔

C++ وراثت:

اب، ہم C++ وراثت اور اس کے دائرہ کار کے بارے میں سیکھیں گے۔

وراثت وہ طریقہ ہے جس کے ذریعے ایک نئی کلاس تیار کی جاتی ہے یا موجودہ کلاس سے اتری ہے۔ موجودہ کلاس کو 'بیس کلاس' یا 'پیرنٹ کلاس' بھی کہا جاتا ہے اور جو نئی کلاس بنائی جاتی ہے اسے 'ماخوذ کلاس' کہا جاتا ہے۔ جب ہم کہتے ہیں کہ بچے کی کلاس کو والدین کی کلاس سے وراثت میں ملا ہے تو اس کا مطلب ہے کہ بچے کے پاس والدین کی کلاس کی تمام خصوصیات ہیں۔

وراثت سے مراد (a) رشتہ ہے۔ ہم کسی بھی رشتے کو وراثت کہتے ہیں اگر 'is-a' کو دو طبقوں کے درمیان استعمال کیا جائے۔

مثال کے طور پر:

  • طوطا ایک پرندہ ہے۔
  • کمپیوٹر ایک مشین ہے۔

نحو:

C++ پروگرامنگ میں، ہم وراثت کا استعمال یا لکھتے ہیں:

کلاس < ماخوذ - کلاس >: < رسائی - وضاحت کنندہ >< بنیاد - کلاس >

C++ وراثت کے طریقے:

وراثت میں کلاسوں کو وراثت میں لینے کے 3 طریقے شامل ہیں:

  • عوام: اس موڈ میں، اگر چائلڈ کلاس کا اعلان کیا جاتا ہے تو پیرنٹ کلاس کے ممبران کو چائلڈ کلاس سے وراثت میں ملتا ہے جیسا کہ والدین کی کلاس میں ہوتا ہے۔
  • محفوظ: میں اس موڈ میں، پیرنٹ کلاس کے پبلک ممبر چائلڈ کلاس میں محفوظ ممبر بن جاتے ہیں۔
  • نجی : اس موڈ میں، والدین کی کلاس کے تمام اراکین چائلڈ کلاس میں پرائیویٹ ہو جاتے ہیں۔

C++ وراثت کی اقسام:

C++ وراثت کی اقسام درج ذیل ہیں:

1. واحد وراثت:

اس قسم کی وراثت کے ساتھ، طبقات ایک بنیادی طبقے سے شروع ہوئے۔

نحو:

کلاس ایم
{
جسم
} ;
کلاس N : عوامی ایم
{
جسم
} ;

2. متعدد وراثت:

اس قسم کی وراثت میں، ایک طبقہ مختلف بنیادی طبقات سے اتر سکتا ہے۔

نحو:

کلاس ایم

{

جسم

} ;

کلاس N

{

جسم

} ;

کلاس O : عوامی ایم ، عوامی این

{

جسم

} ;

3. کثیر سطحی وراثت:

وراثت کی اس شکل میں ایک بچہ طبقہ دوسرے بچے طبقے سے آتا ہے۔

نحو:

کلاس ایم

{

جسم

} ;

کلاس N : عوامی ایم

{

جسم

} ;

کلاس O : عوامی این

{

جسم

} ;

4. درجہ بندی کی وراثت:

وراثت کے اس طریقہ کار میں ایک بنیادی طبقے سے کئی ذیلی طبقات بنائے جاتے ہیں۔

نحو:

کلاس ایم

{

جسم

} ;

کلاس N : عوامی ایم

{

جسم

} ;

کلاس O : عوامی ایم

{

} ;

5. ہائبرڈ وراثت:

اس قسم کی وراثت میں متعدد وراثتیں اکٹھی ہوتی ہیں۔

نحو:

کلاس ایم

{

جسم

} ;

کلاس N : عوامی ایم

{

جسم

} ;

کلاس O

{

جسم

} ;

کلاس پی : عوامی این ، عوامی O

{

جسم

} ;

مثال:

ہم C++ پروگرامنگ میں ایک سے زیادہ وراثت کے تصور کو ظاہر کرنے کے لیے کوڈ چلانے جا رہے ہیں۔

جیسا کہ ہم نے ایک معیاری ان پٹ آؤٹ پٹ لائبریری کے ساتھ شروعات کی ہے، پھر ہم نے بیس کلاس کا نام 'برڈ' دیا ہے اور اسے پبلک کر دیا ہے تاکہ اس کے ممبران قابل رسائی ہو سکیں۔ پھر، ہمارے پاس بیس کلاس 'ریپٹائل' ہے اور ہم نے اسے عام بھی کیا۔ پھر، ہمارے پاس آؤٹ پٹ پرنٹ کرنے کے لیے 'cout' ہے۔ اس کے بعد ہم نے چائلڈ کلاس 'پینگوئن' بنایا۔ میں مرکزی() فنکشن ہم نے کلاس پینگوئن کا آبجیکٹ 'p1' بنایا ہے۔ سب سے پہلے، 'برڈ' کلاس عمل میں آئے گی اور پھر 'ریپٹائل' کلاس۔

C++ میں کوڈ کے نفاذ کے بعد، ہمیں بیس کلاسز 'برڈ' اور 'ریپٹائل' کے آؤٹ پٹ اسٹیٹمنٹس ملتے ہیں۔ اس کا مطلب ہے کہ ایک کلاس 'پینگوئن' بیس کلاس 'برڈ' اور 'ریپٹائل' سے ماخوذ ہے کیونکہ پینگوئن ایک پرندہ ہونے کے ساتھ ساتھ رینگنے والا جانور بھی ہے۔ یہ اڑنے کے ساتھ ساتھ رینگ بھی سکتا ہے۔ لہذا متعدد وراثت نے یہ ثابت کیا کہ ایک بچہ طبقہ کئی بنیادی کلاسوں سے اخذ کیا جا سکتا ہے۔

مثال:

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

ہم نے اپنا پروگرام ان پٹ آؤٹ پٹ اسٹریمز کا استعمال کرکے شروع کیا۔ پھر، ہم نے پیرنٹ کلاس 'M' کا اعلان کیا ہے جو کہ عوامی ہونے کے لیے تیار ہے۔ ہم نے بلایا ہے۔ ڈسپلے() بیان کو ظاہر کرنے کے لئے فنکشن اور 'cout' کمانڈ۔ اگلا، ہم نے چائلڈ کلاس 'N' بنایا ہے جو پیرنٹ کلاس 'M' سے اخذ کیا گیا ہے۔ ہمارے پاس ایک نئی چائلڈ کلاس 'O' ہے جو چائلڈ کلاس 'N' سے ماخوذ ہے اور دونوں اخذ شدہ کلاسوں کی باڈی خالی ہے۔ آخر میں، ہم دعوت دیتے ہیں مرکزی() فنکشن جس میں ہمیں کلاس 'O' کے آبجیکٹ کو شروع کرنا ہے۔ دی ڈسپلے() آبجیکٹ کا فنکشن نتیجہ کو ظاہر کرنے کے لیے استعمال کیا جاتا ہے۔

اس اعداد و شمار میں، ہمارے پاس کلاس 'M' کا نتیجہ ہے جو پیرنٹ کلاس ہے کیونکہ ہمارے پاس a تھا۔ ڈسپلے() اس میں فنکشن. لہذا، کلاس 'N' پیرنٹ کلاس 'M' سے اور کلاس 'O' پیرنٹ کلاس 'N' سے ماخوذ ہے جو کثیر سطحی وراثت سے مراد ہے۔

C++ پولیمورفزم:

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

پولیمورفزم کے زمرے:

پولیمورفزم بنیادی طور پر دو طریقوں میں پایا جاتا ہے:

  1. ٹائم پولیمورفزم کو مرتب کریں۔
  2. رن ٹائم پولیمورفزم

آئیے وضاحت کرتے ہیں۔

6. مرتب وقت پولیمورفزم:

اس وقت کے دوران، داخل کردہ پروگرام کو ایک قابل عمل پروگرام میں تبدیل کر دیا جاتا ہے۔ کوڈ کی تعیناتی سے پہلے، غلطیوں کا پتہ چلا جاتا ہے. اس کی بنیادی طور پر دو قسمیں ہیں۔

  • فنکشن اوورلوڈنگ
  • آپریٹر اوور لوڈنگ

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

7. فنکشن اوورلوڈنگ:

اس کا مطلب ہے کہ ایک فنکشن مختلف کام انجام دے سکتا ہے۔ فنکشنز کو اوورلوڈ کے نام سے جانا جاتا ہے جب ایک جیسے نام کے ساتھ کئی فنکشنز ہوتے ہیں لیکن الگ الگ دلائل ہوتے ہیں۔

سب سے پہلے، ہم لائبریری کے ساتھ ساتھ معیاری نام کی جگہ استعمال کرتے ہیں۔ پھر ہم صارف کی وضاحت شدہ کلاس 'Add' کا اعلان کریں گے۔ کلاس کے اندر، ہم ایک فنکشن ADD() کو دو پیرامیٹرز کے ساتھ بطور عوامی بیان کرتے ہیں۔ ایک بار پھر، اسی نام کے ساتھ کلاس کے باڈی کے اندر ایک نئے فنکشن کا اعلان کریں لیکن اس فنکشن کا کوئی پیرامیٹر نہیں ہے۔ یہاں ہم تین تار شروع کرتے ہیں۔ پہلی دو تاروں کی کچھ قدر ہوتی ہے اور آخری سٹرنگ پہلی دو تاروں کو جوڑنے کے لیے استعمال ہوتی ہے۔ ہم نتیجہ پرنٹ کرنے کے لیے 'cout' کمانڈ استعمال کرتے ہیں۔ اگلا، ہم کال کرتے ہیں مرکزی() کلاس سے باہر کا طریقہ۔ ہم مطلوبہ کلاس 'Add' کا ایک آبجیکٹ بناتے ہیں۔ اب، ہم پہلے فنکشن کو دو پیرامیٹرز کے ساتھ کال کرتے ہیں اور پھر دوسرے فنکشن کو بھی کال کرتے ہیں۔ آخری مرحلے میں، ہم پروگرام کو ختم کرنے کے لیے 'ریٹرن 0' بیان شامل کرتے ہیں۔

آپریٹر اوورلوڈنگ:

آپریٹر کے متعدد افعال کی وضاحت کے عمل کو آپریٹر اوور لوڈنگ کہا جاتا ہے۔

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

8. رن ٹائم پولیمورفزم:

یہ وہ وقت ہے جس میں کوڈ چلتا ہے۔ کوڈ کی ملازمت کے بعد، غلطیوں کا پتہ لگایا جا سکتا ہے.

فنکشن اوور رائیڈنگ:

ایسا اس وقت ہوتا ہے جب ایک اخذ شدہ کلاس بیس کلاس ممبر فنکشنز میں سے ایک کے طور پر ایک جیسی فنکشن تعریف استعمال کرتی ہے۔

پہلی سطر میں، ہم ان پٹ اور آؤٹ پٹ آپریشنز کو انجام دینے کے لیے لائبریری کو شامل کرتے ہیں۔ مزید، ہم معیاری نام کی جگہ شامل کرتے ہیں۔ اگلی سطور میں، ہم ایک پیرنٹ کلاس ’انسان‘ کا اعلان کرتے ہیں۔ کلاس کے اندر، ہم عوامی کے طور پر دو پیرامیٹرز کے ساتھ ایک فنکشن کی وضاحت کرتے ہیں۔ پھر، ہم متن 'چلنا' کو ظاہر کرنے کے لیے 'cout' بیان کا استعمال کرتے ہیں۔ کلاس کے باہر، ہم ایک چائلڈ کلاس 'جانور' بناتے ہیں جو پیرنٹ کلاس سے اخذ کیا جاتا ہے۔ یہاں، ہم ایک فنکشن بناتے ہیں جس کا نام اس سے ملتا جلتا ہے جس کا پہلے پیرنٹ کلاس میں اعلان کیا گیا تھا۔ پھر، متن 'کھانے' کو دکھانے کے لیے 'cout' بیان کا استعمال کریں۔ ہم استعمال کرتے ہیں مرکزی() فنکشن دریں اثنا، ہم ایک کلاس آبجیکٹ 'm' بناتے ہیں۔ پھر، ہم پیرنٹ کلاس کے فنکشن کے ساتھ ساتھ چائلڈ کلاس کے فنکشن کو بھی کہتے ہیں۔ 'ریٹرن 0' کمانڈ استعمال کریں۔

C++ سٹرنگز:

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

'cin' کمانڈ کا استعمال کرتے ہوئے سٹرنگ حاصل کریں:

اس میں کسی خالی جگہ کے بغیر سٹرنگ متغیر داخل کرنے کے لیے استعمال کیا جاتا ہے۔ دی گئی مثال میں، ہم ایک C++ پروگرام نافذ کرتے ہیں جو 'cin' کمانڈ استعمال کرتے ہوئے صارف کا نام حاصل کرتا ہے۔

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

صارف 'احمد چوہدری' کا نام درج کرتا ہے۔ لیکن ہمیں مکمل 'احمد چوہدری' کے بجائے صرف 'احمد' بطور آؤٹ پٹ ملتا ہے کیونکہ 'cin' کمانڈ خالی جگہ کے ساتھ سٹرنگ کو محفوظ نہیں کر سکتی۔ یہ صرف اسپیس سے پہلے ویلیو کو اسٹور کرتا ہے۔

cin.get() فنکشن کا استعمال کرکے سٹرنگ حاصل کریں:

دی حاصل کریں() cin کمانڈ کا فنکشن کی بورڈ سے سٹرنگ حاصل کرنے کے لیے استعمال کیا جاتا ہے جس میں خالی جگہیں ہوسکتی ہیں۔

مندرجہ بالا مثال میں ان پٹ اور آؤٹ پٹ آپریشنز کرنے کے لیے لائبریری شامل ہے۔ پھر، ہم نے ایک معیاری نام کی جگہ استعمال کی۔ دی مرکزی() فنکشن کہا جاتا ہے. اس کے بعد، ہم 's' نام کی ایک تار شروع کرتے ہیں۔ اگلے مرحلے میں، 'cout' کمانڈ کا استعمال 'Enter a String' کے بیان کو ظاہر کرنے کے لیے کیا جاتا ہے۔ دی cin.get() صارف سے سٹرنگ حاصل کرنے کے لیے لاگو کیا جاتا ہے۔ کا استعمال کرتے ہوئے cin.get() فنکشن میں ہم سٹرنگ ویلیو پاس کرتے ہیں اور سٹرنگ کا سائز بطور پیرامیٹر بتاتے ہیں۔ پروگرام کے آؤٹ پٹ کو ظاہر کرنے کے لیے 'cout' کمانڈ کو دوبارہ استعمال کیا جاتا ہے۔ آخر میں، ہم واپسی 0 شامل کرتے ہیں۔

صارف کے ذریعہ 'میرا نام علی ہے' اسٹرنگ درج کی گئی ہے۔ ہمیں نتیجہ کے طور پر مکمل سٹرنگ 'My name is Ali' ملتی ہے کیونکہ cin.get() فنکشن ان سٹرنگز کو قبول کرتا ہے جس میں خالی جگہیں ہوتی ہیں۔

2D (دو جہتی) سٹرنگس کا استعمال کرتے ہوئے:

اس صورت میں، ہم سٹرنگز کی 2D صف کو استعمال کر کے صارف سے ان پٹ (تین شہروں کے نام) لیتے ہیں۔

سب سے پہلے، ہم ہیڈر فائل اور ایک معیاری نام کی جگہ کو مربوط کرتے ہیں۔ ہم دعوت دیتے ہیں۔ مرکزی() فنکشن پھر، ہم تین قطاروں اور پندرہ کالموں کے ساتھ حروف کی دو جہتی صف شروع کرتے ہیں۔ اگلے مرحلے میں، لوپ کو متغیر 'i' کو شمار کرنے کے لیے استعمال کیا جاتا ہے تاکہ مطلوبہ سٹرنگ پر اعادہ کیا جا سکے جب تک کہ null کردار کی شناخت نہ ہو جائے۔ 'فور' لوپ کے باڈی کے اندر، ہم 'شہر کا نام درج کریں' لائن دکھانے کے لیے 'cout' کمانڈ استعمال کرتے ہیں۔ پھر شہر کا نام حاصل کرنے کے لیے 'cin' بیان کا استعمال کریں۔ ہم پھر سے ایک اور 'for' loop اور 'cout' سٹیٹمنٹ استعمال کرتے ہیں تاکہ لوپ ختم ہونے تک شہروں کے نام کو ترتیب میں ظاہر کیا جا سکے۔ اگلا، 'return 0' کمانڈ استعمال کیا جاتا ہے۔

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

C++ معیاری لائبریری:

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

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

C++ معیاری لائبریری درج ذیل دو اقسام کو سپورٹ کرتی ہے۔

  • ایک میزبان نفاذ جو C++ ISO معیار کے ذریعہ بیان کردہ تمام ضروری معیاری لائبریری ہیڈر فائلوں کا انتظام کرتا ہے۔
  • ایک اسٹینڈ اسٹون نفاذ جس کے لیے صرف معیاری لائبریری سے ہیڈر فائلز کا ایک حصہ درکار ہوتا ہے۔ مناسب ذیلی سیٹ ہے:
(کم از کم اعلان کرنا

ایٹم_سائنڈ_لاک_فری اور ایٹمک-غیر دستخط شدہ_لاک_فری)

<رینجز>
(کم از کم ایگزٹ کا اعلان، اسقاط، پر_کوئیک_ایگزٹ، ایگزٹ، کوئیک_ایگزٹ) <تناسب>
<فنکشنل>
<موازنہ>
<تصورات>
<حدود>
<نیا>
<میموری> <ورژن>

گزشتہ 11 C++ آنے کے بعد سے ہیڈر فائلوں میں سے کچھ کو مایوس کیا گیا ہے: وہ ہیں ، ، اور ۔

ہوسٹڈ اور فری اسٹینڈنگ نفاذ کے درمیان فرق ذیل میں بیان کیے گئے ہیں:

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

اقسام:

فری اسٹینڈنگ اور ہوسٹڈ دونوں کو C++ سے تعاون حاصل ہے۔ ہیڈر فائلوں کو درج ذیل دو میں تقسیم کیا گیا ہے۔

  • آئوسٹریم حصے
  • C++ STL حصے (معیاری لائبریری)

جب بھی ہم C++ میں عمل درآمد کے لیے کوئی پروگرام لکھتے ہیں، ہم ہمیشہ ان فنکشنز کو کال کرتے ہیں جو پہلے سے STL کے اندر لاگو ہوتے ہیں۔ یہ معلوم افعال کارکردگی کے ساتھ شناخت شدہ آپریٹرز کا استعمال کرتے ہوئے ان پٹ اور ڈسپلے آؤٹ پٹ میں لیتے ہیں۔

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

ایس ٹی ڈی نام کی جگہ اور ہیڈر فائلیں:

فنکشنز یا متغیرات کے تمام اعلانات معیاری لائبریری کے اندر ہیڈر فائلوں کی مدد سے کیے جاتے ہیں جو ان کے درمیان یکساں طور پر تقسیم ہوتی ہیں۔ اعلان اس وقت تک نہیں ہوگا جب تک کہ آپ ہیڈر فائلوں کو شامل نہیں کرتے ہیں۔

فرض کریں کہ کوئی فہرستیں اور تار استعمال کر رہا ہے، اسے درج ذیل ہیڈر فائلیں شامل کرنے کی ضرورت ہے۔

#include

# شامل کریں

یہ کونیی بریکٹ '<>' اس بات کی نشاندہی کرتے ہیں کہ کسی کو اس مخصوص ہیڈر فائل کو ڈائرکٹری میں تلاش کرنا ہوگا جس کی وضاحت اور شامل کی جارہی ہے۔ کوئی بھی اس لائبریری میں '.h' ایکسٹینشن کا اضافہ کر سکتا ہے جو کہ اگر ضرورت ہو یا چاہے تو کیا جاتا ہے۔ اگر ہم '.h' لائبریری کو خارج کرتے ہیں، تو ہمیں فائل کے نام کے شروع ہونے سے پہلے 'c' کے اضافے کی ضرورت ہے، جیسا کہ اس بات کا اشارہ ہے کہ یہ ہیڈر فائل C لائبریری سے تعلق رکھتی ہے۔ مثال کے طور پر، آپ یا تو لکھ سکتے ہیں (#include یا #include

نام کی جگہ کے بارے میں بات کرتے ہوئے، پوری C++ معیاری لائبریری اس نام کی جگہ کے اندر واقع ہے جسے std کہا جاتا ہے۔ یہی وجہ ہے کہ معیاری لائبریری کے ناموں کو صارفین کے ذریعہ قابلیت کے ساتھ بیان کیا جانا چاہئے۔ مثال کے طور پر:

Std :: cout << 'یہ گزر جائے گا !/ n' ;

C++ ویکٹر:

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

#شامل <ویکٹر>

اعلامیہ:

ویکٹر کا اعلان ذیل میں دکھایا گیا ہے۔

Std :: ویکٹر < ڈی ٹی > NameOfVector ;

یہاں، ویکٹر کلیدی لفظ استعمال کیا جاتا ہے، DT ویکٹر کی ڈیٹا کی قسم دکھا رہا ہے جسے int، float، char، یا کسی دوسرے متعلقہ ڈیٹا ٹائپ سے تبدیل کیا جا سکتا ہے۔ مندرجہ بالا اعلان کو اس طرح دوبارہ لکھا جا سکتا ہے:

ویکٹر < تیرنا > فیصد ;

ویکٹر کے سائز کی وضاحت نہیں کی گئی ہے کیونکہ عمل کے دوران سائز بڑھ سکتا ہے یا کم ہو سکتا ہے۔

ویکٹر کا آغاز:

ویکٹر کی ابتدا کے لیے، C++ میں ایک سے زیادہ طریقے ہیں۔

تکنیک نمبر 1:

ویکٹر < int > v1 = { 71 ، 98 ، 3. 4 ، 65 } ;

ویکٹر < int > v2 = { 71 ، 98 ، 3. 4 ، 65 } ;

اس طریقہ کار میں، ہم دونوں ویکٹر کے لیے براہ راست قدریں تفویض کر رہے ہیں۔ ان دونوں کو تفویض کردہ اقدار بالکل ایک جیسی ہیں۔

تکنیک نمبر 2:

ویکٹر < int > v3 ( 3 ، پندرہ ) ;

اس ابتدائی عمل میں، 3 ویکٹر کے سائز کا تعین کر رہا ہے اور 15 ڈیٹا یا قدر ہے جو اس میں محفوظ کیا گیا ہے۔ ڈیٹا ٹائپ 'int' کا ایک ویکٹر 3 کے دیے گئے سائز کے ساتھ 15 کو اسٹور کرنے کے لیے بنایا گیا ہے جس کا مطلب ہے کہ ویکٹر 'v3' درج ذیل کو اسٹور کر رہا ہے:

ویکٹر < int > v3 = { پندرہ ، پندرہ ، پندرہ } ;

اہم آپریشنز:

ویکٹر کلاس کے اندر ویکٹرز پر جو بڑے آپریشنز ہم نافذ کرنے جا رہے ہیں وہ ہیں:

  • قدر کا اضافہ کرنا
  • قدر تک رسائی حاصل کرنا
  • قدر کو تبدیل کرنا
  • قدر کو حذف کرنا

اضافہ اور حذف:

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

استعمال شدہ افعال:

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

  • Insert(): یہ کسی خاص مقام پر ویکٹر کنٹینر کے اندر قدر کے اضافے کے لیے استعمال ہوتا ہے۔
  • مٹانا(): یہ کسی خاص مقام پر ویکٹر کنٹینر کے اندر کسی قدر کو ہٹانے یا حذف کرنے کے لیے استعمال ہوتا ہے۔
  • Swap(): یہ ایک ویکٹر کنٹینر کے اندر موجود قدروں کی تبدیلی کے لیے استعمال ہوتا ہے جو اسی ڈیٹا کی قسم سے تعلق رکھتا ہے۔
  • Assign(): یہ ویکٹر کنٹینر کے اندر پہلے سے ذخیرہ شدہ قدر کے لیے ایک نئی قدر مختص کرنے کے لیے استعمال ہوتا ہے۔
  • Begin(): یہ ایک لوپ کے اندر ایک ایٹریٹر کو واپس کرنے کے لیے استعمال ہوتا ہے جو پہلے عنصر کے اندر ویکٹر کی پہلی قدر کو ایڈریس کرتا ہے۔
  • Clear(): یہ ویکٹر کنٹینر کے اندر ذخیرہ شدہ تمام اقدار کو حذف کرنے کے لیے استعمال ہوتا ہے۔
  • Push_back(): یہ ویکٹر کنٹینر کی تکمیل پر ایک قدر کے اضافے کے لیے استعمال ہوتا ہے۔
  • Pop_back(): یہ ویکٹر کنٹینر کی تکمیل پر کسی قدر کو حذف کرنے کے لیے استعمال ہوتا ہے۔

مثال:

اس مثال میں، موڈیفائر کو ویکٹر کے ساتھ استعمال کیا جاتا ہے۔

سب سے پہلے، ہم اور ہیڈر فائلوں کو شامل کر رہے ہیں۔ اس کے بعد، نام کی جگہ std کو ایک ساتھ کلاسز کو شامل کرنے کے لیے مربوط کیا جاتا ہے۔ پورے پروگرام کی منطق کو لکھنے کے لیے، ہم مین() فنکشن کو کال کر رہے ہیں جہاں 'ڈیجٹس' کے نام سے ایک ویکٹر شروع کیا گیا ہے۔ یہ ویکٹر کی تفویض اگلے مرحلے میں کی جاتی ہے جہاں 'ڈیجٹس' نے 6 اور 24 کی قدر دی ہے، جس کا مطلب ہے کہ ویکٹر کنٹینر کے اندر 6 عناصر محفوظ ہیں، جن میں سے ہر ایک کی قیمت 24 ہے۔ ' کمانڈ. کنٹینر کے اندر موجود عناصر کے اضافے کے لیے موڈیفائر فنکشن push_back() کے لیے 'for' لوپ کا استعمال کیا جاتا ہے۔ اب، آخر میں ہندسوں میں 3 قدر کا اضافہ کیا جاتا ہے۔ ہم ویکٹر کنٹینر کے سائز کا ریکارڈ رکھنے کے لیے ایک متغیر 'x' شروع کرتے ہیں۔ اب، آخری عنصر کی قدر ظاہر ہوتی ہے اور pop_back() فنکشن کنٹینر کے اندر ذخیرہ کردہ نمبر '3' کو حذف کردے گا۔ تمام عناصر کے ڈسپلے کے لیے، ہم دوبارہ 'for' لوپ کے ساتھ استعمال کر رہے ہیں۔ داخل کریں() ترمیم کرنے والا جو اقدار کو داخل کرے گا۔ یہاں، ویکٹر کنٹینر کے شروع میں 4 ڈالا جائے گا اور اسکرین پر دکھایا جائے گا۔ دی واضح() موڈیفائر پھر کنٹینر کے اندر ذخیرہ شدہ تمام اقدار کو صاف یا حذف کر دے گا۔ کلیئرنگ کے بعد ویکٹر کا سائز دکھایا جاتا ہے۔

آؤٹ پٹ نیچے دکھایا گیا ہے۔

C++ فائلیں ان پٹ آؤٹ پٹ:

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

فائلوں میں ان پٹ اور آؤٹ پٹ تین اہم کلاسوں کی طرف سے خصوصیات ہیں:

  • 'istream' کلاس کو ان پٹ لینے کے لیے استعمال کیا جاتا ہے۔
  • آؤٹ پٹ کو ظاہر کرنے کے لیے 'اوسٹریم' کلاس کا استعمال کیا جاتا ہے۔
  • ان پٹ اور آؤٹ پٹ کے لیے، 'iostream' کلاس استعمال کریں۔

فائلوں کو C++ میں اسٹریمز کے طور پر ہینڈل کیا جاتا ہے۔ جب ہم کسی فائل میں یا کسی فائل سے ان پٹ اور آؤٹ پٹ لے رہے ہوتے ہیں تو درج ذیل کلاسز استعمال ہوتی ہیں۔

  • آف اسٹریم: یہ ایک اسٹریم کلاس ہے جو فائل پر لکھنے کے لیے استعمال ہوتی ہے۔
  • اگر سلسلہ: یہ ایک اسٹریم کلاس ہے جسے فائل سے مواد پڑھنے کے لیے استعمال کیا جاتا ہے۔
  • ندی: یہ ایک اسٹریم کلاس ہے جو فائل میں یا فائل سے پڑھنے اور لکھنے دونوں کے لیے استعمال ہوتی ہے۔

'istream' اور 'ostream' کلاسز ان تمام کلاسوں کے آباؤ اجداد ہیں جن کا اوپر ذکر کیا گیا ہے۔ فائل اسٹریمز کا استعمال اتنا ہی آسان ہے جتنا کہ 'cin' اور 'cout' کمانڈز، صرف ان فائل اسٹریمز کو دوسری فائلوں سے منسلک کرنے کے فرق کے ساتھ۔ آئیے 'fstream' کلاس کے بارے میں مختصراً مطالعہ کرنے کے لیے ایک مثال دیکھتے ہیں:

مثال:

اس مثال میں، ہم ایک فائل میں ڈیٹا لکھ رہے ہیں۔

ہم پہلے مرحلے میں ان پٹ اور آؤٹ پٹ اسٹریم کو مربوط کر رہے ہیں۔ پھر ہیڈر فائل کو شامل کیا جاتا ہے کیونکہ ہم فائل سے ڈیٹا لکھنے اور پڑھنے جا رہے ہیں۔ اس کے بعد نام کی جگہ کی مدد سے کلاسز بلائی جاتی ہیں۔ دی مرکزی() فنکشن پروگرام کی باڈی کے لیے کہا جاتا ہے جہاں 'آف اسٹریم' استعمال ہوتا ہے جو ڈیٹا کو فائل میں لکھتا ہے، فائل کو New_File کے طور پر بنایا جاتا ہے۔ اگلے مرحلے میں، ہم استعمال کر کے 'example' کے نام سے ایک ٹیکسٹ فائل کھول رہے ہیں۔ کھولیں( ) طریقہ۔ ہم فائل میں کونیی بریکٹ کی مدد سے ایک متن لکھ رہے ہیں۔ ایک بار جب اس سے نمٹا گیا تو ہر فائل کا بند ہونا مقدر ہے۔ اس لیے فائل کو کی مدد سے بند کر دیا گیا ہے۔ بند کریں() فنکشن

فائل 'example' کو پرسنل کمپیوٹر سے کھولا جاتا ہے اور فائل پر لکھا ہوا متن اس ٹیکسٹ فائل پر نقش ہوجاتا ہے جیسا کہ اوپر دکھایا گیا ہے۔

فائل کھولنا:

جب کوئی فائل کھولی جاتی ہے، تو اس کی نمائندگی ایک ندی سے ہوتی ہے۔ فائل کے لیے ایک آبجیکٹ بنایا گیا ہے جیسے New_File پچھلی مثال میں بنایا گیا تھا۔ تمام ان پٹ اور آؤٹ پٹ آپریشنز جو اسٹریم پر کیے گئے ہیں خود بخود فائل پر لاگو ہوتے ہیں۔ کسی فائل کو کھولنے کے لیے، open() فنکشن کو اس طرح استعمال کیا جاتا ہے:

کھولیں۔ ( NameOfFile , موڈ ) ;

یہاں، وضع غیر لازمی ہے۔

فائل بند کرنا:

تمام ان پٹ اور آؤٹ پٹ آپریشنز مکمل ہونے کے بعد، ہمیں اس فائل کو بند کرنے کی ضرورت ہے جو ترمیم کے لیے کھولی گئی تھی۔ ہمیں ملازمت دینے کی ضرورت ہے۔ بند کریں() اس صورت حال میں کام کریں.

نئی_فائل۔ بند کریں ( ) ;

جب یہ ہو جاتا ہے، فائل دستیاب نہیں ہو جاتی ہے۔ اگر کسی بھی حالت میں آبجیکٹ کو تباہ کر دیا جاتا ہے، یہاں تک کہ فائل سے منسلک ہونے کے باوجود، ڈسٹرکٹر بے ساختہ close() فنکشن کو کال کرے گا۔

ٹیکسٹ فائلیں:

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

مثال:

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

یہاں، ہم New_File() فنکشن کا استعمال کرکے 'example' نام کی فائل میں ڈیٹا لکھ رہے ہیں۔ ہم فائل کو 'مثال' کا استعمال کرکے کھولتے ہیں۔ کھولیں() طریقہ 'آف اسٹریم' کا استعمال فائل میں ڈیٹا شامل کرنے کے لیے کیا جاتا ہے۔ فائل کے اندر تمام کام کرنے کے بعد مطلوبہ فائل کو استعمال کرکے بند کردیا جاتا ہے۔ بند کریں() فنکشن اگر فائل غلطی کا پیغام نہیں کھولتی ہے تو 'فائل سپورٹ نہیں ہے، فائل لوڈ کرتے وقت ایرر' دکھایا جاتا ہے۔

فائل کھلتی ہے اور متن کنسول پر ظاہر ہوتا ہے۔

ٹیکسٹ فائل پڑھنا:

ایک فائل کو پڑھنا بعد کی مثال کی مدد سے دکھایا گیا ہے۔

مثال:

'ifstream' فائل کے اندر محفوظ ڈیٹا کو پڑھنے کے لیے استعمال کیا جاتا ہے۔

مثال میں شروع میں بڑی ہیڈر فائلیں شامل ہیں ۔ پھر، اندر 'ifstream' استعمال کریں۔ مرکزی() فنکشن 'ifstream' کی مدد سے، ہم 'New_File' فائل کے ساتھ ڈیٹا کو پڑھیں گے جس میں 'example' ٹیکسٹ فائل کے اندر محفوظ کردہ ٹیکسٹ دکھایا گیا ہے۔ ہم ملازمت کرتے ہیں کھولیں() فائل کو کھولنے کا طریقہ۔ اگلا، ہم 'while' لوپ کا استعمال کریں گے۔ 'مثال' ٹیکسٹ فائل سے ڈیٹا کو پڑھنے کے بعد، بند کریں() فنکشن مطلوبہ فائل کو بند کرنے کے لیے استعمال کیا جاتا ہے۔ اگر سسٹم کے پاس مخصوص فائل نہیں ہے، تو ہمیں 'فائل کھولنے میں ناکام' پیغام ملتا ہے۔

ٹیکسٹ فائل کے اندر محفوظ کردہ تمام معلومات اسکرین پر ظاہر ہوتی ہیں جیسا کہ دکھایا گیا ہے۔

نتیجہ

مندرجہ بالا گائیڈ میں، ہم نے C++ زبان کے بارے میں تفصیل سے سیکھا ہے۔ مثالوں کے ساتھ ساتھ، ہر موضوع کا مظاہرہ اور وضاحت کی گئی ہے، اور ہر عمل کی وضاحت کی گئی ہے۔