 اسلام علیکم آج ہمارا لیکچہ number 25 ہے CS201 Introduction to Programming کا پچھلے کچھ لیکچہ سے میں تھوڑی سی دھمکی دیتا آیا ہوں تھوڑا ساپ کو بتاتا ہوں کہ کچھ اکسائٹنگ سٹاف آنے والا ہے آج وہ اکسائٹنگ سٹاف سے ہم تھوڑا ساپ پردہ اٹھاتے ہیں اور دیکھتے ہیں کیا ہم بات کرنے لگے ہیں آئیڈیہ ہے کہ ابھی تک ہم functional programming یا جس کو ہم normal traditional programming کہتے تھے توپڑاون اپروچ کے ساتھ اس کے بارے میں بات کرتے آئے ہیں اور ہماری vehicle جو تھی جس سواری پہ ہم چل رہے تھے وہ c language تھی کچھ c++ کے فیچس ہم استعمال کرتے آئے ہیں like اس کا input output system c in اور c out ہم استعمال کرتے آئے ہیں بجائے c کا جو standard printf اور scanf ہوتا تھا لیکن by and large ہم c language کے ساتھ deal کر رہے تھے آج جو تھوڑا ساپ کو introduce کرنا ہے وہ ہے c++ language کے ساتھ اور باقی کا course جو ہے وہ ہم c++ کے فیچس اور اس کے classes اور objects کے بارے میں بات کریں گے یہ میں clear کرتا چلوں کہ یہ course object oriented programming کا course نہیں ہے وہ course بعد میں آئے گا وہ ایک proper full-fledged course ہے جس میں object oriented programming کی بات ہوگی اس course میں ہم c++ کے enhanced features جس میں classes و گرا ہم ضرور کور کریں گے لیکن جو inheritance اور اس کسم کی چیزیں ہیں جو کے object oriented programming کے ساتھ آتی ہیں وہ ہم اگلے course میں independently cover کریں گے سو let's take a look at کہ ہم نے کون سے enhanced features ہیں جو c++ میں introduce ہوئے تھے ان میں سے چند ایک میں گناتا چلتا ہوں وہ آج کی لیکچر میں ہم cover کریں گے پہلہ جو ہے وہ ہے default function arguments اس کے بارے میں ہم بات کریں گے پھر ہم inline functions کے بارے میں بات کریں گے اور چلتے چلتے ہم کچھ classes کے اوپر بھی شاید بات کریں ورنہ وہ next lecture میں رہے گا پہلے تھوڑا سا پیچھے کو چلتے ہیں اور دیکھیں ہسٹری کیا ہے c++ کی کیسی جیسے میں پہلے بھی ایک lecture میں ذکر کیا تھا بنی تھی 70s کے اندر اور یہ bell labs کے اندر scientist جو تھے انہوں نے اس کو develop کیا لنگوج کو یہ کن لنگوج سے ڈرائب ہوئی ایک انہوں نے اس کو influenced کیا لیکن what we have learnt so far is that it is a lean and mean language it's a very concise very small language with a lot of power وہ power مجھے پتہ ہے آپ کے question answers دیکھ کے کچھ confusing ہو رہی ہے خاص طور پہنٹرز کا جو issue ہے کچھ pointer کیا چیز ہوتی ہے کیسے استعمال کرتے ہیں لیکن اب جو ڈیا آرہ ہے کچھ ہم نے پہلے ڈرائب کی بات کی تھی مہلوک وگیرہ اس سے بھی آپ کو ڈیا ہوگا کہ pointer کی power کیا ہے اور اب جو ہم کبر کریں گے اس کے اندر بھی pointers بار بار آئیں گے لیکن maybe with different names and maybe with different usage and in a more protected environment see کے بعد یہ کافی مطلب popular کافی نہیں کہنا چاہئے یہ ایک ایسی language بنگے جس نے دنیا یا programming world کو it took it by storm major operating systems including unix itself were written in the c language جب جاکے c کی limitations ظاہر ہونے لگی تو وہ کیا چیزیں تھی جن کی وجہ سے ہمیں limitations feel ہونے لگی let's take a look at that as we have learnt so far c is a language where programs are composed of functions اور functions یہاں وہ basic concept یہ ہے کہ بڑا سا problem لیں اس کے تکڑے کرنے شروع کریں چھوٹے چھوٹے موڈلز بناتے جائیں اور پھر موڈلز کی جگہ پہ وہ functions لکھنے شروع کر دیں جو کہ وہ موڈلز کا کام کرتے ہیں اور ان سب functions کو جوڑ کے ایک main program کے control کے اندر دے کے اس کو ہم اپنا پورا program کہتے ہیں یہ top down structured programming کی اپروج تھی اور structured programming کے کچھ میں آپ کو rules بھی بتایا تھے جو ابھی بھی valid ہیں اور آندھ بھی valid رہیں گے آپ نے modular programming کرنی ہے چھوٹے چھوٹے programs لکھنے ہیں functions لکھنے ہیں وہ لمبے چھوڑے نہیں لکھنے جب بھی آپ کو لگے کہ ایک function دو تین چار سفے یا دو تین چار screen سے بڑھ رہا ہے تو اس کو چھوٹا کرنے کی کوشش کریں and try to make it concise and every function should perform a specific well-defined task اس کے بعد ہم نے کہا کہ functions کے اندر جہاں تک ہو سکے وہاں پہ سنگل انٹری اور سنگل exit rule کو obey کرنا چاہیے یہ بہت ہی important rule ہے and it leads to a better understanding of the code when we come back to revisit it. Do we come back to revisit it Again I've mentioned it many times before and I'll say it again. Don't assume کہ آپ کا code ایک دفعہ لکھا تو یا وہ ہمیشہ تک چلتا ہی رہے گا without requiring any changes اور یا وہ ایک دفعہ استعمال ہوگا اور دوسی دفعہ استعمال کبھی نہیں ہوگا. یہ دونوں اپروچیز جو ہے یہ زراسی when you write useful programs useful code you will find that they will be a reuse for it you will come back and will try to use it again in some other instance some other requirement چلتے چلتے پانسال کے بعد آپ کو پتہ چلے گا Oho میں نے ایک بینک کا سسٹم لکنا ہے جس کے اندر numbers کو words میں express کرنا ہے اور خیال آئے گا کہ ہاں وہ پانسال پہلے ہم نے ایک function ایسا لکھا تھا وہ code کیا تھا rather than reinventing the wheel every time we face a problem we would want to reuse some of the stuff that we had done before when we follow the rules of good structured programming وہ جو پانسال کے بعد ہم اپنا لکھا ہوا source code کھولیں گے تو اس میں ہمیں جلدی سے سمجھا جائے گی کہ جی ہم نے کیا کیا تھا اور اس کو استعمال کیسے کرنا ہے اور اگر کسی modification کی ضرورت ہو تو ہم اس کو easily modify کر لیں گے پھر میں نے یہ بھی کہا تھا کہ آپ نے code کو comment کیا کریں وہ بھی ہماری یادہانی کے لیے ہے اور صرف ہمارے لیے نہیں remember when you get into large projects when you get into bigger programs تو وہ one person task نہیں ہوتا normally there is a team of programmers working on that problem when you working in a team other people in the team have to understand کہ آپ نے program کیا لکھا ہے اور آپ نے کس طرح سے کیا logic استعمال کیا ہے اور اس کے اندر your comments ہیں وہ بہت useful رہتی ہیں so not just بعد میں اپنی یادہانی کے لیے بلکہ when working in a team اسی وقت بھی کسی اور نے آپ کا لکھا ہوا function استعمال کرنا ہے تو وہ یہ نہیں ہوگا کہ وہ function کھول کے پہلے اس کو دیکھتا رہے screen کے اوپر اور پھر بھگا بھگا آپ کے پاس آجا ہے کہ بھی وہ تمہارا function دا میں نے استعمال کرنا تھا لیکن سمجھ نہیں آڑی کہ تم نے کیا کیا ہوا اس کے اندر so liberally comment your code write lots of comments and write useful comments at least tell us function کرتا کیا ہے اس کو کیا arguments پاس کیا جاتے ہیں ان کی کیا processing ہوتی اور یہ واپس value کیا return کرتا ہے یا کیا processing کرتا ہے اس کے بعد don't write useless comments کہ جی why loop سے پہلے comment لکھوا this is a loop I mean everybody can see it's a while loop it's a loop so there's no need for that comment اگر comment اس طرح سے لکھیں کہ جی the following loop processes the payroll of all the people in the company تو پھر actual processing of the payroll کیوں پر تو لوگ اور کر سکتے ہیں کہ کیسے کی ہوئی ہے لیکن کو loop identify ہو جاتی ہے کہ جی یہ والی loop ہے یہ کام کر رہی ہے so anyway structured programming کے جو principles اور ideas میں نے آپ کو بتائے وہ میں نے کہا valid ہیں اور valid رہیں گے and you should use them as the basis of all the programs that you write now back to why we needed a change ہوا یہ آپ کو یاد ہوگا اگر پوری history trace کریں زیادہ time لگ جائے گا لیکن مشین language کے بعد assembly language آئی جہاں پہ ہم نے تھوڑے سے symbolic codes استعمال کرنے جو ہمیں as human beings it's easier for us to understand rather than writing ones and zeros symbolic code جو تھا assembly language کے بعد ہم تھوڑے سے higher level languages کی طرف آگئے مثلاan cobald you have four trend جہاں پہ they were more English like so it was easier for us as human beings to read اور پیچھے compiler تھا جو کہ اس کو اٹھاکے change کرتا تھا یہاں سے آگے چلے تو یہ spaghetti code کا زمانہ تھا ہر طرف کو program کی شاقیں جا رہی ہیں اس کو trace کرنا debug کرنا کسی اور کو logic سمجھنا بہت مشکل بات ہوتی تھی میں اپنے experience بتا دیتا ہوں میرے ایک دوست امریکہ میں کام کر رہے تھے یہ 1971-72 کی بات ہے ان سے میں ملن گیا تو انہوں نے میں نے پوچھا بھی کیا کر رہے ہو اس نے اپنا شاقار مجھے دکھایا which was a book ایک کتابچا تھا اچھا بھلا اور وہ کیا تھا وہ ان کا جو program انہوں نے develop کیا تھا اس کا flow chart تھا یعنی صرف flow chart جو تھا وہ کئی 100 صرفوں کے اوپر کونسٹیٹوٹ کرتا تھا اور اس کو میں تھوڑا سا سمجھنے کی کوشش کیا and gave up in five minutes کیجی I can't understand کہ اس کا logical flow کی در جاتا ہے جب ہمارے problems اور programs کی complexity اس level پہ پہنچی تو structured programming was born break the program up break it into smaller functions that we can understand and are more manageable but اس کی بھی اپنی ایک limit تھی وہ limit کہاں پہ آئی اب دیکھیں we have to understand کہ یہ function oriented programming یہ کام کیسے کرتی ہے before we realize اس کی limit کہاں پہ آتی ہے جو ہم functional program design کرتے ہیں اس میں جس دیتا کو ہم نے process کرنا ہے وہ ایک کسم کی بہر کی entity ہے it's an entity that doesn't belong to the program لہذا ہم دیکھیں these functions that manipulate some data that we will provide it and therefore our focus is always on the function when the problems they became complex it turned out کہ جی we can't leave the data outside somehow دیتا جو ہے اب اس کو program کی اندر شامل کرنے کی ضرورت ہے or a new thought process یہ چلنا شروع ہوا کہ جی instead of the programs being driven by functions پر دیتا کرنا حیہتا ہے تھوڑا سا آپ کو ہند دیتا چلوں اس اپروچ کا دیکھیں آپ نے word process تو استعمال کیا ہوگا اس میں اگر آپ نے word کو کسی کو bold کرنا ہو تو آپ کیا کرتے ہیں think about it simple آپ پہلے word کو select کرتے ہیں اور select کرنے کے بعد آپ کہتے ہیں اس کو bold کر دو notice that the function came afterwards the data on which it was to act came first first that doesn't happen with functions. ابیدہ کام لکتے ہیں square x تو ہم کہتے ہیں square کرنا ہے کس کو کرنا ہے پھر x اس کو دیتے ہیں یہاں پہ ہم کہہ رہے ہیں love's پہلے سیلیکٹ کرو اور پھر بتاو کہ کرنا کیا ہے bold یا بتاو underline کرنا ہے یہ جو بھی italics میں کرنا ہے وہ بعد میں آتا ہے now the programming approach is being driven by data جب یہ programs کی complexity اس level پہ پہنچی کہ functional programming یا structured programming started reaching its limits people started thinking of a new way of doing things that new way became object-oriented programming early 1980s کی بات ہے ایک اور bell labs کا scientist بیان سٹرو سٹرپ difficult name he started working کہ جیسی لنگو جو اتنی popular ہو چکی ہے اس کو ضرہ سا انہانس کیا جائے اس کے اندر اور features add کیا جائیں جو کہ اس شوٹ کمین کو over come کر سکیں کہ جی it is a functional language it doesn't understand ڈیٹا ڈیٹا اندر نہیں آسکتا and so and so forth. so he started evolving this language جس کا پہلے نام پڑا c with classes اور c with classes سے چلتے چلتے it eventually found a name which was c++ اور تھوڑا سا آگے کا بھی بتا دوں اس کے بعد اس کا follow-up آیا جاوہ کے ساتھ اور جاوہ کو slang کی اندر کئی لوگ کہتے ہیں c++ minus ڈیٹنی c++ c سے evolve ہو کے بڑی سی language بن گئی پھر اس میں سے کچھ features نکال دیے minus کر دیے تو ہمارے پس جاوہ آگئے anyway that was light hearted it's not exactly true but evolution یہی رہی ہے languages کی c++ یا c with classes جو ہے اس کے اندر صرف classes کا concept نہیں کچھ اور چیزیں بھی introduce ہوئی ان چیزوں کے بارے میں آج ہم پہلے بات کریں گے اور classes میں ہم بعد میں پہنچیں گے پہلی چیز ہم لیتے ہیں default function arguments دیکھیں functions ہم اب تک لکھتے آئے ہیں اور functions لکھتے وقت ہم دیکھتے تھے کہ جی ان کو کچھ ہم ڈیٹا پاس بھی کرتے تھے اور pass کر کے وہ function کو کچھ process کرتا تھا اور ڈیٹا کو ہمیں کئی جگہوں پہ آپ نے notice کیا ہوگا کہ جی ایک function کو 4 arguments اگر pass کرنے ہیں دو یا تین جو ہیں وہ ہمیشہ وہ ہی جا رہے ہوتے اور دو یا تین جو ہے وہ تھوڑے سے بدل بدل کے ہم جی رہا ہوتے for example ہمارے پاس ایک function ہے کہتا ہے power x in where x is the number جس کی ہم نے power لینی ہے اور in جو ہے is the power to which x is to be raised now suppose آپ نے لکھتا لیا function اور پھر اس کو استمال میں لانے لگے تو آپ کو پتہ چلا کہ جی آپ کے جس problem ڈیٹا میں آپ کام کر رہے ہیں اس میں 90 times out of 100 آپ x کو square کر رہا ہوتے you are always squaring that and once in a while اس کا cube بھی لے لیتے ہیں you are to the power 4 بھی لے لیتے ہیں بڑا contrived example ہے but I am trying to lead up into the fact that default function arguments are use for when we find کہ ایک function ہے جس کے کچھ arguments ایسے ہیں جو by and large ان کو ایک ہی value پاس کی جاتی ہے اور کبھی کبھی ان میں چین جائے گی یا کچھ اور areas میں چین جائے گی تو ان function کو ہم default function arguments دینا شروع کر دیتے ہیں now what does this mean with default function arguments جب ہم function کا prototype لکھتے ہیں یا function کی definition لکھتے ہیں تو اس کے اندر ہم اس کے جو argument list ہے وہی پے values دینے لگھ پڑتے ہیں ایک example لے لیں ایک function ہے جو کہ دو arguments لیتا ہے پہلہ integer ہے اور دوسر double ہے اور اس کے ساتھ کچھ calculation کرتا ہے now normally if the function is called f we would have written اس کا prototype f int i double x کچھ اس طرح سے ہم نے اس کی پہلی لائن لکھتے نی تھی prototype کیلے یا definition کی پہلی لائن اب suppose کیجی i اور x ایسے ہیں جن کو by and large ایک کسم کی values ہی پاس ہو رہی ہوتی ہیں بار بار اور کبھی کبھی ان کے change کی ضرورت ہے تو وہ values جو کہ بار بار استعمال ہو رہی ہوتی ہیں ان کو ہم function کی prototype یا definition کی پہلی لائن جو ہے اس کے اندر شامل کر دیتے ہیں اب جو میں نے ایک سامپل لیا ہم نے کہا جی f جو ہے وہ دو arguments لیتا ہے پہلہ integer دوسر double تو ہم کریں گے کیا کہ اگر integer کو سب سے پہلے مطلب common value جو جانی ہے وہ 1 ہے اور double کی جو common value جانی ہے وہ ہے 10.5 تو ہم function کے prototype میں یا اس کی definition کی پہلی لائن جو وہاں پہلی لائن جو ہے وہاں پہ ملکھیں گے f پھر parenthesis کے بعد int i equal to 1 comma double x equal to 10.5 parenthesis کلوست اور اس کے بعد function سارہ لکھتے ہیں دیکھیں ہوا کیا جو اب میں بار بار کہہ رہوں کہ function کی prototype function کی definition کی پہلی لائن یہ آپ سمجھیں کہ جو سب سے پہلے program کے اندر شامل ہو گی اگر آپ نے prototype اوپر دے دیا ہے تو وہاں پہ آپ یہ default arguments دیں گے اور اگر function ہی پورا مین سے پہلے لکھتی ہے تو default arguments جو ہیں وہیں پہاں آپ دکھا دیں گے ہوتا کیا ہے اب آپ function کو call کر سکتے ہیں in this particular example with 0, 1 اور 2 arguments کیسے سپوز ہم چھوٹا سا function لے لیتے ہیں f کرتا کیا ہے کہ it simply prints the values of i and x جو بھی integer تھا اس کی value اس نے print کر دینی ہے اور جو double اس کو pass ہوا ہے number اس کی value اس نے print کر دینی ہے اب main کی اندر آپ پہلے تو call کریں f کو f with parentheses empty ان کے اندر کوئی argument pass نہیں کرتے ہیں یہ you should try it out and prove to yourself that it works what you will find is that your function is printing out i کی value 1 اور x کی value 10.5 next call آپ کریں main میں سے ہی f of 2 یعنی f کو actually 2 arguments چاہیں لیکن ہم بھیج صرف ایک رہے ہیں اب دیکھیں f کیا کرتا ہے وہ دکھائے گا i کی value 2 اور x کی value 10.5 now go to the third step you say f of 2 کمہ 12 now the function will show the values i کی value 2 اور x کی value 12 اس سے تھوڑا ساپ کو pattern کا اندازہ ہو گیا کہ یہ default values استعمال کیسے ہو رہی ہیں اب ان کے تھوڑا سے rules کی طرف چلیں دیکھیں میں کوئی ایک سامپل ایسا نہیں دیا جہاں پہ i کی value کو میں نے omit کر دیا ہو اور کہا ہو کہ جی f of 12.0 کوئی جادو سے اس طرح سے چلے کہ i کی value 1 رہے اور x کی value 12.0 ہو جائے یہ نہیں ہوتا default values are applied starting from the left to right and therefore اگر آپ نے کوئی بھی value provide کی ہے call کرتے اگر آپ نے ایک اپنی مین میں یا کسی اور function سے جہاں سے f کو call کیا جا رہا ہے جب بھی اس میں آپ پہلی value دیں گے تو وہ function کے پہلے argument کی value کو رپلیس کرے گی دوسی value دیں گے تو دوسی value کو رپلیس کرے گی and so on میں تو ایک سامپل دو arguments والی بات کر رہا ہوں میں بھی دس arguments جاتے ہوں but وہ left to right assign ہوں گی there is no luxury there is no feature جو یہ کہے کہ پہلہ argument default استعمال ہو جائے اور دوسرے کی value اگر ہم provide کریں گے call کرتے وقت اگر ایسی situation ہے تو آپ کو پہلی value بھی provide کرنی پڑے گی so please keep that in mind that you cannot omit values at the beginning of the list you can omit them from the right hand side اسی rule کو اگر ایک اور طریق سے دیکھا جائے کہ جی function کی definition میں اگر ہم default values دینا چاہتے ہیں تو اسی rule کے وجہ سے you have to realize کہ جی the default values right to left supply کرنی چاہی ہیں for example اگر اسی functions کو لیلیں ہم f کو لیلیں اور ہم کہیں کہ جی default value صرف x کی دینی ہے تو x جو ہے وہ اس کی list میں اخیر پی آنا چاہی ہے تاکہ یہ rule ڈیسو بے نہ ہو جائے کہ جب ہم اس کو call کریں تو جو number دینگے وہ پہلے argument کو supply ہوگا دوسر number وہ دوسر argument کو supply ہوگا اگر آپ اس کو switch کر دیتے یعنی ہم کہتے f parenthesis کے بعد double x equal to 10.5 comma i تو دیکھیں آپ x کی default value استعمال کرنے کا کوئی ہمار پاس طریقہ نہیں ہے you will have to supply values for both of the arguments as per this rule so please remember whenever you have default values that you want to make sure جو وہ variables جن کو default values دی جا سکتی ہیں تو function کی prototype کے اندر وہ right hand side پہ آئیں they should be on the extreme right اس کے بعد کوئی non default value والا argument نہیں ہو سکتا اس کے left پر non default value والا ہو سکتا ہے in other words کوئی ایسا rule نہیں ہے کہ اگر آپ نے ایک default value دی دی تو سارے arguments کی default value دیں اس کی کوئی ضرورت نہیں ہے now practically کام کہاں آئے گا suppose ہمارا function f جو ہے جس کی ہم بات کر رہے تھے یہ output میں لکھتا ہے the value of the integer is اور پھر آگے آئے کی value so یہ چیزیں آپ default کے اندر بھی لجا سکتے ہیں کہ جی یہ ہمیشہ یہ چیز لکھتا ہے so maybe you could have modified this function and said کہ اس کو ایک string بھی پاس ہوتی ہے جو کہ integer سے پہلے لکھی جائے گی اور string کی value یہ ہے the value of the integer is اور اگر ہم یہ چاہیں کہ جی اس کی جگہ پہ کچھ اور لکھ دیا جائے تو پھر call کرتے وقت ہم نئی value دی دیں گے default value override ہو جائے گی جو آپ نے call کرتے وقت value supply کی ہے وہ print ہوگی so it is quite a useful mechanism the only rule that you have to realize is کہ جی default values کیس ترتیب میں Provide کی جاتی ہے function کو لکھا کیسے جاتا ہے اور آپ کوئی value omit نہیں کر سکتے اگر آپ بادوالی value استعمال لیا Provide کرنا چاہیں call کی اندر so that was an issue with default function arguments as usual whenever I introduce a topic I will always tell you کہ جی اب آپ program لکھیں آپنے لیے and prove to yourself that it works یہ فیچر c میں نہیں تھا c++ میں introduce ہوا ہے one of default function default argument values let's go on to the next topic وہ topic جو ہے that has to do with the declaration of variables inside the code پہلے جب c شروع ہوئی تھی اس کے اندر rule یہ تھا کہ جی تمام declarations program کے اوپر آنی چاہیں ہیں اور جب declarations اوپر آگئیں تو پھر نیچے ان variables کو ہم استعمال کر سکتے تھے اس رول کو already ہم اپنے جو previous lectures ہیں اور programs جو لکھیں اس کے اندر relax کر چکے ہیں لیکن آج explicitly اس کو تکل کرتے ہیں c++ کے اندر ایک change آیا انہوں نے کہا کہ جی variable جو ہے وہ program میں کہیں پے بھی declare ہو سکتا ہے not just at the beginning of the program or at the beginning of the block but it can be declared anywhere in the code philosophy اس کی کیا ہے philosophy یہ ہے کہ جی جہاں پہ آپ نے کسی variable کو استعمال کرنا ہے تو اس جگہ کے قریب سے قریب جاکے وہاں پہ declare کریں so again program پڑھتے وقت آپ کو نظر آئے گا کہ جی یہاں پہ ہم نے i کو declare کیا اور ساتھ یہ ہم استعمال کر رہے ہیں now again یہ کوئی hard and fast direction نہیں ہے it's a flexibility you can still declare functions at or rather the variables at the top of the program there is no requirement that you declare them very close to the point where you're going to use them so it becomes a matter of style again I will refer back to the discussion board and even the moderated discussion board جو ہم کھلتے ہیں occasionally آپ بار بار یہ پوچھتے ہیں کہ جی int i equal to zero لکھنا بہتر ہے یا int i اور پھر نیچے i equal to zero لکھنا بہتر ہے I say بہتر وہ چیز ہے جو آپ اپنا ہی develop your own styles it is not for me to tell you which is better in which is not because when you talk about style it's a matter of پسند آپ کو پسند کیا چیز آتی ہے ہاں ایک چیز میں کہتا چلوں گا be consistent in your style اگر آپ کو لگتا ہے کہ اگر جو ویریبرل آپ دیکلیر کر رہے ہیں اس کو اسی وقت initialize کر دیا جائے and you find it easy to read and easy to understand then stick with that style there's nothing wrong with it my preference may be different your preference may be different لیکن be consistent اسی طرح اگر آپ loops کو لے لیں so loops کو بھی لکھنے کے کئی طریقے ہیں while loop لے لیں so while کے بعد condition دینے کے بعد ہم brace open کر سکتے ہیں اس کے بعد اس کی body آ جاتی ہے اور brace بن کرتے ہیں دوسرے لوگ جو ہیں وہ while اور condition لکھے next line پہ اکیلی opening brace لکھیں curly bracket جو ہے اور پھر next line پہ اس کی body لکھیں اور اکیلی line کے اوپر brace کو بن کرتے ہیں again it's a matter of style and choose whichever one you find to be more comfortable develop your own style but again I'll repeat be consistent ہر دفعہ ایک اسم کا کام کریں all right back to the discussion area ہم بات کر رہے تھے کہ جی پہلے ہم نے default arguments کی بات کی اس کے بعد بات کی اب کہ جی variables کو declare کہاں کرنا ہے so again a matter of style but let's talk about the implications of this declaration ایک چیز یہ ہے کہ جی variable just block کے اندر declare کیا جاتا ہے یعنی braces کے اندر اس کی سکوپ وہ block ہے یعنی اگر braces open کی اس کے اندر آپ نے کہا دیا int i اور جب تک وہ braces بن نہیں ہوتی تو i آپ کو available ہے اور visible رہے گا جب braces ختم ہوئی اور وہ block ختم ہوا تو i بھی ختم ہو گیا so be aware of this کہ جناب whenever you declare a variable inside a block then the variable exists وہ زندہ ہی رہتا ہے صرف اس block کے اندر اس block سے بہر اس کی زندگی ختم ہو جاتی ہے وہ نظر نہیں آتا you can't reference it compiler ہی error کو پکر لے گا دوسی چیز going back to the philosophy of declaring a variable very close to where we want to use it تو کتاب میں بھی آپ نے کئی example دیکھیں گے انہوں نے for loop لکھی اس طریقے سے ہے for int i equal to zero and so on یہ نہیں انہوں نے int i کو for loop کے ساتھ ہی declare کیا اور ساتھ ہی استعمال کرنا شروع کر دیا ہے دو چیزیں اس کے اندر آپ کو معلوم ہونی چاہیں پہلی چیز یہ جو integer i ہے یہ declare ہوا ہے outside the braces of the for loop یہ نہیں اس کا سکوپ آپ آگے باقی کے program میں چلے گا as long as اس کے بہر کوئی اور block نہیں تھا ایک یہ چیز آپ خیال رکھیں دوسی چیز یہ کہ جی block کے اندر اگر آپ for int i equal to zero تو کر دیا اور پھر braces کھول کے آپ نے وہاں پہ int temp کر دیا اور temp کو استعمال کیا تو جب for loop ختم ہوگی temp مر چکا ہوگا وہ available نہیں ہوگا باقی کے program کے اندر as per the previous definition of the scope i جو ہے وہ موجود رہے گا it'll be available again and you can use it as an ordinary integer variable wherever you want it تو یہ بات آگئی کہ جب آپ declareing it where we want to use it very close to that point again style کی بات ہے آپ چاہیں تو پہلے int i اوپر کر دیتے اور پھر for میں ڈال دیتے میرا اپنی preference تو ہے وہ تو یہی ہے کہ جی اس کو علیدہ سے declare کیا جائے وجہ ابھی میں نے آپ کو بتایا کہ جب ہم نے for statement کے اندر int i لکھ دیا ہے تو جب for loop ختم ہوتی ہے تو i پھر بھی visible رہتا ہے اور available ہے بھی اگر وہ available ہو گیا ہے اور وہ for loop کے بعد بھی استعمال ہو سکتا ہے تو پھر for loop کے ساتھ اس کی association کیوں پھر ہم کیوں کہیں کہ جی declare ہی ہم for کے ساتھ کر رہیں یا تو ہوتا وہ مر جاتا تو it's a matter of style i'm not saying what is right and wrong i'm saying develop your own style but be consistent with it again the advantage of you know you can argue both ways کہ جہاں پہ ہم نے استعمال کرنا ہے وہاں declare کیا variable block کے اندر جب آپ declare کرتے ہیں وہاں پہ تو it makes a lot of sense کہ جی block سے نکلے variable بھی ختم ہو گیا آپ نے پھر define کرنا ہے پھر define کریں پھر استعمال کریں لیکن otherwise اگر main flow کے اندر آپ نے درمیان میں آکے کہنا int i اور پھر اس کا استعمال شروع کرنا ہے تو might as well do it at the top but that's just a guideline that's my preference you can develop your own preferences let's go on to the next area and that is called inline functions c++ نے یہ بھی ہمیں ایک facility دی کہ جی inline functions define یا declare کیا جا سکیں inline functions کیا ہوتا ہے پسلے لیکچر میں جب ہم بات کر رہے تھے یا ایک دو لیکچرز پہلے ہم نے macros کی بات کی تھی اور macros میں میں نے کہا تھا ایک دو آپ کو چھوٹے چھوٹے macros بھی بناکے دکھائے تھے macs کا بنایا تھا یا circle area کی بات کی تھی کہ جب وہ define ہوتا ہے اور اس کا نام ہم code کی اندر استعمال کرتے ہیں تو pre processor اس کی definition جوکہ sharp define کے ساتھ استعمال ہوئی تھی وہ پوری definition وہاں پیست کر دیتا ہے اور پھر compilation کا process شروع ہوتا ہے یعنی the macro replaces the definition of the macro replaces wherever the macro name is used inside your program inline functions جہیں یہ بھی تقریباں ویسے ہی کام کرتے ہیں declare کرنے کے لیے آپ سب سے پہلے function کے نام سے پہلے آپ inline لکھتے تھے ہیں i n l i n e اس کا مطلب یہ ہے یہ directive ہے to the compiler کہیں جب یہ function استعمال ہوگا بجائے function call generate کرنے کے اس کی جو definition ہے پوری body وہاں پیست کر دو اور اس کو proper arguments وغیرہ Provide کر دو فائدہ نقصان کیا ہے پہلہ نقصان کی بات کر لیتے ہیں there is always a cost and a benefit نقصان یہ ہے کہ جی اگر وہ function آپ کے program کے اندر دس دفعہ call ہوا اور function itself جو ہے وہ دو سفے کا function ہے تو وہ دس جگوں پہ دو دو سفے پیست ہوتے جائیں گے آپ کا program جو ہے اس طرح سے پھول کے بڑا ہو جائے گا when it goes to the compiler now again it is not relevant to say کہ جی is that good or bad because it depends on the particular circumstance maybe it's alright you've got lots of memory you've got lots of room and there is no problem with execution of a large source code تو آپ اس کو bloat میں جانے دیں downside کوئی آتی ہے well downside کوئی خاص نہیں ہے inline functions کی لیکن اس چیز کا خیال رکھنا لازمی ہے کہ inline is a request it's a hint to the compiler it is not a strong directive اگر compiler کا دل کیا تو وہ اس کو inline بنائے گا اگر اس کو دل نہ کیا تو وہ ordinary function he call وہاں پے generate کرے گا how do we find out what happens it's difficult but you can debug the program and look at the machine code to find out کہ وہاں پے function call generate ہوئی ہے یا وہ code paste ہوا ہے but that's advanced for the moment فائدے کی طرف چلتے ہیں کہ the inline function استعمال کرنے کا فائدہ کیا ہے دیکھیں ہم نے ایک macro define کیا تھا پچھلے لیکچوز میں جہاں پہ ہم نے square لیا تھا کسی نمبر کا ہم نے اس کو define کر دیا تھا as x star x اگر یہ ایسے define ہوا ہو تو جہاں پہ ہم اس کو call کرنے جاتے ہیں اگر ہم نے اس کو call کر لیا with something like i plus j تو کیونکہ pre processor نے simple text substitution کرنی ہے وہ وہاں پے substitute کر دے گا i plus j star i plus j which is clearly quite different from i plus j within parenthesis times i plus j within parenthesis تو ہم نے کہا تھا کہ اس واستے macro define کرتے وقت جب parametrized macro ہے تو اس کے arguments کو enclose کریں parenthesis کے اندر تاکہ اس کی expansion کریکٹ ہو سکے دوسی چیز یہ تھی macro کے ساتھ کہ جی macro کو کچھ نہیں پتا کہ اس کو int بھیجا جا رہا ہے دبل بھجا جا رہا ہے float بھیجا جا رہا ہے کیا دے رہے ہیں اس نے تو text substitution کر دینی ہے اور پھر compiler نے اس کو compile کرنا ہے جب ہم inline functions استعمال کرتے ہیں تو functions کے تمام rules وہ apply ہو جاتے ہیں اب function کی prototype میں ہم نے اس میں لکھ دیا ہے کہ یہ 1, 2, 1, 4 ایسی کوئی چیز لے گا تو جہاں پہ ہم استعمال کرنے جا رہے ہیں کوڑ میں جب آپ لکھیں گے تو compiler type checking کر دے گا آپ کے لئے وہ کہہ گا جی آپ صحیح طریقے سے functions کو call کر رہے ہیں یا غلط طریقے سے وہ compiler ہی پکٹے کہ آپ کو خلطی بتا دے گا اب ایک تو آپ کی type checking ہوگی لہذا طریقی type checking is enforced دوسرہ یہ کہ جیسے میں نے mention کیا کہ inline is a request the compiler then decides is the function small enough is it appropriate enough کہ اس کو inline expand کر دیا جائے کوئی side effects نہیں آئیں گے it will behave exactly like an ordinary function call let us take a look at some of this sample code to figure out کیا side effect ہو سکتا ہے اور function call کے ساتھ کیا side effect نہیں ہوتا for example اگر ہم macro لکھ دیتے ہیں اور اس کو call کرتے ہیں with something which says x++ یعنی increment کر دیتے ہیں ہم x کو macro کی call کے اندر اور macro آپ handouts میں بھی دیکھ لیں وہ اس کے سم کہہ ہے کہ x2 دفعہ استعمال ہوتا ہے ہوگا کیا کہ x++ وہ 2 دفعہ وہاں substitute ہو جائے گا اور 2 دفعہ substitute ہونے کی وجہ سے x وہ 2 دفعہ increment ہو جائے گا which is certainly what we don't want ہم تو چاہتے ہیں کہ x1 دفعہ increment ہو اور macro call بھی چل جائے لیکن اگر ہم f of x++ لکھتے ہیں تو obviously وہاں have function call with a single increment of the variable x which is what we want اب inline اس کی expansion بھی ہو سکتی ہے لیکن کوئی double incrementing نہیں ہوگی یہ میں نے ایک سیمپل ساپ کو ایک سمپل دیا ہے جو macro's کی side effects آ جاتے ہیں so by and large it is better that you use inline functions instead of macro's macro's کی اپنی usage ہے بالکل سیمپل چھوٹی موٹی definition کیلئے وہ استعمال کر لیں اس کا اپنا فائدہ یہ ہے کہ جی وہ int کیلئے بھی چلتی ہے or double کیلئے بھی چلتی ہے or float کیلئے بھی چلتی ہے and so on اور یہی چیز نقصاندے بھی ہو سکتی ہے کہ آپ اس کو غلط call کر سکتے ہیں وہاں پہاں ٹائپ جیکنگ ان فورس کرنے کے لیے آپ inline functions لکنا شروع کر دیتے ہیں so this is another one of the enhancements جو کہ c++ میں آئی اور c میں نہیں تھی so inline functions کا آخری point میں نوٹ کرتا چلو اگر آپ کے function نے بار بار call ہونا ہے اور کئی source fileوں سے call ہونا ہے ابھی تک تو ہم usually ایک source file بناتے رہیں اور اس کے اندر استعمال کرتے رہیں then as I mentioned earlier with the header files it is better کہ آپ اپنا inline function جو ہے وہ header file کے اندر دال دیں کم اس کم اس پروٹروٹائپ اور definition ادھر چلی جائے لیکن یہ یاد رہے کہ جو بھی file inline function کو استعمال کرتی ہے اس کو recompile کرنا لازمی ہے کیونکہ وہ code substitution ہو سکتی ہے لہذا you don't want the compile program to be out of date whenever you make a change in the inline function you have to recompile the program where it is being used and please keep that in mind ابھی تک جو ہم نے دو تین باتیں کی enhancements to see in c++ they were actually stylistic issues minor points یہ وہ what is the exciting part exciting part for today's talk or today's lecture is function overloading یہ کیا بلا ہے function overloading actually overloading آپ already دیکھتے آئے کہاں دیکھتے آئے ہیں جب آپ see out کو کہتے ہیں کہ جی less than less than لکھے آگے ایک string لکھ دیتے ہیں double quotation marks کے اندر تو see out پرنٹ کر دیتے ہیں screen کے اوپر آپ see out کو کہتے ہیں یہ integer آئی ہے اس کو پرنٹ کر دو وہ integer کی value پرنٹ کر دیتا ہے آپ اس کو دبل دیتے ہیں وہ double کی value پرنٹ کر دیتا ہے with decimal places and so on یا تو see out کے پاس بہت سا جادو ہے that it is able to print different types of variables and strings et cetera knowing کہ ان کا format کیا ہے یہ actually is a subtle form of overloading see out کا جو operator ہے which is the stream insertion operator وہ overloaded ہے اگر اس کی definition دیکھیں تو کافی سارے آپ کو ملے گے header file دیکھنے iostream.h you will find that it is heavily overloaded ابھی تک میں overloaded overloaded کرتا جا رہا میں نے بتایا نہیں ہے کہ یہ overloading ہوتی کیا ہے overloading basically is using the same name to perform multiple tasks or different tasks depending on the situation that is exactly what see out is doing depending on the situation it either prints an integer or it prints a double or it prints a float or it prints a character or it prints a string it all depends on the situation that means the behavior is changing but the function see out less than looks identical ابھی تک آپ کو اتنی programing آگئی اور میں نے یہ بھی آپ کو بار بار کہا ہے کہ یہ تو بڑی دم مشینے ہیں یہ جو کمپیوٹرس ہیں یہ بالکل وہی کام کرتی ہیں جو ہم ان کو بتائیں گے تو وہ اپنے طور پر decision نہیں لے سکتا اس کے لیے to be able for see out to be able to behave differently it must be told all of these things that means اس کو علیدہ سے بتانا ہے کہ جی انٹیجر کو کیسے پرنٹ کرنا ہے اس کو علیدہ سے بتانا ہے کہ دبل کو کیسے پرنٹ کرنا ہے and so on یہ جو علیدہ علیدہ بتایا ہوا ہے اس میں جو اپریٹر استمال کیا ہے یہ وہی ہے double less than sign so in a way وہ اپریٹر overload ہو رہا ہے آج کے لیے ہم اپریٹر overloading میں نہیں جائیں گے ہم صرف اپنی your discussion ہے وہ function overloading تک مہد رکھیں گے function overloading میں concept یہی ہے کہ جی function کا نام وہی رہے گا لیکن شاید اس کا بیحیویر بدل جائے simple example کہ جی آپ نے square root لینی ہے کسی number کی اب وہ number integer بھی ہو سکتا ہے long بھی ہو سکتا ہے float بھی ہو سکتا ہے double بھی ہو سکتا ہے and depending on the type of the argument you probably may need to do a different type of mathematical calculation so what do we do normally ہم کیا کرتے ہم اس کے لیے let's say int, float, double یا دو لے لیتے ہیں int or double لے لیتے ہیں ہم اس کے لیے دو علیہ دا علیہ دا functions لکتے ہم کہتے int square root اور آگے لکتے int i اس کا argument اور دوسرا ایک اور function لکتے جس کا نام ہوتا double square root اور اس کا argument ہوتا double x یا جو بھی آپ variable نام دینا چاہیں اسی طرہ ان کی return طرح دیورت ہوتی کہ جی آئی کی square root جو ہے Will it be an integer No It's not necessary it be an integer So most probably ہم int square root کے جو return طرحوں کیا ہم دول لکتے اور double square root کی return طرح تو ویسے ہی دول ہوگی اب that would be the conventional way of programming and we know how to do that دو علیہ دا علیہ دا function لکھلو اور پھر code میں جہاں پے بھی آپ نے double کی square root لیکلنی ہے اور جہاں پہ آپ نے انٹیجر کی سکویروٹ لینی ہے وہاں کال کریں انٹ سکویروٹ فنکشن the name is different it causes overhead for us it means 2-3 اس سے ساتھ problem آتے ہیں ایک تو ہمیں کئی نام یاد رکھنے پڑھ رہے ہیں کہ جی وہ انٹ سکویروٹ لکھا تھا وہ جی دبل سکویروٹ لکھا تھا فنکشن کے نام بڑتے جا رہے ہیں بیحیوئر ایک ہی کسم کا ہے ایک ہی نہیں ہے ایک ہی کسم کا ہے ہم کہہ رہے ہیں سکویروٹ لینی ہے کہ جی آپ دبل سکویروٹ کو کال کریں اور اس کو انٹیجر پاس کر دیں تو پھر کیا ہوگا well unfortunately or fortunately compilers are so intelligent کہ وہ آپ نے انٹ پاس کیا وہ پہلے دبل میں convert کر کے دبل سکویروٹ کو پاس کر دے گا maybe that is not what we want it maybe we want it کہ جی انٹ کا جو سکویروٹ ہے وہ return بھی انٹ ہی کریں the closest number close that is close to the square root but it is integer so we might have wanted a different behavior and the implicit type casting ہو رہی ہے اس نے integer کو elevate کر دیا double بنا دیا or double square root function کو call کر دیا i.e. there is no way of checking کہ ہم نے correct function استعمال کیا ہے کہ نہیں so what is the solution solution is to use function overloading اب اس کا طریقہ کیا ہے ہم لکھیں گے پھر بھی 2,3,4 جتنے functions ہمیں چاہیں گے اتنے لکھیں گے فرق یہ ہے کہ تمام functions کا نام ایک ہی ہوگا in this particular example ہم square root ہی لکھیں گے function کا نام return type اس کو دینی ہے depending on کے کونسا function ہے ہم اس return type بدل سکتے ہم انٹ کی شہد return type ہم کہیں گے انٹ ہی دو ہمیں جو بھی ہم نے complicated mathematical operation کرنے اس کے بعد اس کے ساتھ ہم کہیں گے جی اس کی return type دبل ہو اب how do we declare them انٹ فالا square root کیا ہے اس کی declaration آجائے گی انٹ square root اور parenthesis کے اندر انٹ i اور پھر اس کی body جو بھی وہ کرتی ہے اسی کا دوسرہ version جو ہے وہ آئے گا double اور function کا نام وہی رہے گا square root اور پھر parenthesis کے اندر ہم نے لکھتی ہے double x اور آگے اس کی definition آگئے جو بھی computation کرنی ہے اب we have two functions ان کا نام ایک ہے how will they be differentiated when the program uses these functions the differentiation comes from the parameters which are passed to this function اگر آپ کے program کے اندر کہیں پہاں آپ نے لکھتی ہے square root اور آگے پرانثیز میں آپ نے لکھتی ہے 10.5 تو the compiler will automatically determine کہ 10.5 is not an integer if it is not an integer it is a float or a double وہ اوپر function prototype کے ساتھ match کرے گا اور دیکھے گا یہ والا function ہے square root کا یہ والا version ہے جو کہ double argument except کرتا ہے وہ والا function call ہوگا میں نے 10.5 کہاں دیا یہاں پہاں x بھی ہو سکتا ہے اگر x variable اس کی type data type وہ double ہو تو double والا version square root کا call ہوگا آگے چل کے آپ لکھتے ہیں square root جی اور جی وہ انٹیجر ہے تو automatically compiler it will match the prototype and it will detect کہ جی انٹیجر والا version استعمال ہونا ہے وہ انٹیجر والا version استعمال ہوگا فائدہ کیا ہے ہمارا program جو ہے بڑا readable بن گیا ہے کہ جی square root لینی ہے square root لے رہے ہیں ختم I am not having to worry about میں نے int square root لکھا ہے اور کہیں double square root لکھا ہے اور پہیں نام وہ contrive کر رہے ہیں how does the compiler differentiate I have told you that it looks at the type of the argument is that the only thing no it looks at the type and the number of arguments that are passed to the function کوئی اور function لیلیں suppose ایک function ہے f جو کہ دو انٹیجر accept کرتا ہے اور اسی کا ہم ایک different version لکھنا چاہتے ہیں جو کہ 3 انٹیجر accept کرتا ہے اب انٹیجر ساری ہیں لیکن ایک میں دو جانے ہیں ایک ویلی کوال کے اندر تین انٹیجر ساری ہے جو when you make the call if you call f with two inch as the argument تو وہ دو انٹیجر ویلی اسے ایک کال ہوگا automatically you don't have to do anything different جب آپ فی کا نام لکھتے آگے آگ تہوں کی تین انٹیجر دے دیں گے تو تین انٹیجر کی تین انٹیجر ویلی کال ہو جائے گا ابھی تک آپ میں سے جو شارف ہیں انہوں نے ایک چیز نوٹس کی ہوگی میں return type کی بات جو ہے گول کر گیاں میں اس کی بات نہیں کر رہا وجہ اس کی یہ ہے کہ return type is not a distinguishing feature of overloaded functions please be very careful about this you cannot write two functions ایک آپ لکھنے int fint اور دوسرا آپ لکھنے and double fint and expect کی یہ دیفرنت ہو گے they are not different in fact compiler ہی نہیں ہی других انٹیجر نا like دے گا وہ کہہ گا ambiguous definition ہے the differentiation between overloaded functions has to be done with the type and the number of arguments past to the function and not by the return type let's take a look at some useful examples ایک چیز جو کہ بار بار ہمیں معروفتا آتی ہے وہ ہے کسی چیز کو ٹھیکنہ ہم see out استعمال کرتے ہیں مبھی ہم own function کیا بڑا پو لائٹلی کہے the value of the integer is i کسی اور جگہ پہ ہم call کریں in double کے ساتھ ہولکیں the value of the double variable is اور آگے اس کی value آجائے اگر ہم print call کریں string کے ساتھ کہ the string in question is اور آگے string لکھ دی جائے وہی بات جو پہلے میں کر رہا تھا یا تو آپ لکھیں انٹ پرنٹ، دبل پرنٹ، سٹرنگ پرنٹ اور دفرینٹ ناموں کے ساتھ فنکشنز لکھنے شروع کر دیں۔ فنکشنز تو آپ کو اتنے ہی لکھنے پڑھیں گے وہ اتنا بڑا ادوانتج نہیں ہے لیکن جب کوڈ پڑھ رہے ہوں گے اس میں بہت ادوانتج آتا تھا آپ کہتے ہیں پرنٹ آئی، پرنٹ ایکس، پرنٹ ایکس where i is an integer, x is a double, s is a string and the appropriate function is automatically called. تو اوویلوڈing پرنٹشنز لکھنے لیکن، ویرے ویرے جیس فرمٹ اب آپ اپنے لیے اگن آپ قرار ہی جانتا ہے اور آپ اپنے لیے مرار اپنے لیے پرنٹ فنکشنز لکھنے لکھنے تریکہ آپ چھوٹا سا مین لکھنے لیکن مین سے پہلے آپ یہی پرنٹ فنکشن لیلیں اور یہی تین لیلیں بیشاک انٹ، دبل پر string اس کے لیے تین فنکشنز لکھنے جو اندر سی اوٹ کے ساتھ ایدانٹیفہ کر سکتے. یہ بہت بہت ساری پیشتے ہیں کہ یہ اوپٹ میں اندر کچھیز پرنٹ کر آ لہو تاکہ نظر آئے کہ پرگے میں کیا کیا کیا ہے تو آپ سی اوٹ کے ساتھ پہلے لکھیں گے the value of the integer is فلانا جو بھی اس کو آگومنٹ پاس کیا ہے and the integer version of the print function دوسرا version لکھیں آپ the value of the double variable is or وہ جو ویریبل کی value pass ہی ہے وہ کر لیں. اس کے بعد آپ لکھیں لکھیں، ویلیو کا سیوڈ کے ساتھ لکھیں، مین پروگرم کے اندر، دیکلیر اور انٹیجر، دیکلیر دبل، دیکلیر اور انیشلائز کی سیوڈ کے ساتھ لکھیں۔ سیم نے نام لکھیں، پروگرم میں لکھیں، پرنٹ آئی، پرنٹ ایکس، پر انتسیز استعمال ہو رہا ہوں گے، پرنٹ ایکس۔ لکھیں، ک tablet ناہی wszystkich لگھ لگا، پہلے careynتا ہے، اپنی اللہ تبان ساران아요۔ ہمارے اجianج ش transactor کی بہت کبینیس ساسج ہے بہت ہوا۔ اٹمیٹی сб sốی ای پہلے انٹیجرسا بل گھ battles Hausheringساش ن جان ل micro and stuffی مینے sadness اس بیل wings趣حہ بی ا�影 پہلے yolk ، ایکی ایک سوچ genau la وا�رشوح پے رک ہوسی شکتی چاہتے ہیں. کسی آب ہےیہ آبھی آبار، میکنن کرتا ہے۔ اس کی تھوڑا سمہ آپ کو ہیٹ دے دیتا ہوں. ہے تو ایدوانسٹ بارکت بڑا ہے ہے جب کمپائلر ان فنکشنز کو کمپائل کرنے جاتا ہے تو وہ ان کے نام کے علاوہ وہی دفرنشیٹنگ فیتشنز یعنی نمبر and ڈائپ اف دہ آگومنٹس ان کو انکلوڈ کر لیتا ہے اور ان دونوں چیزوں کو ایک مشین میں ڈال کے گھما کے ایک نیا نام جنریٹ کرتا ہے. بیکوز دہ نمبر and ڈائپ اف دہ آگومنٹس ہیٹا ہے لیکن ان کے نیا نام نکلا اس مشین کے اندر سے وہ یونیک ہے تو یہ یونیک نیم جو ہے this is able to this allows the compiler to call the correct function at the correct time اس کو فاملی اس کو کہا جاتا ہے name mangling. نام پکڑا ہے اس کو you know مشین میں سے گھما کے مینگل کر دی ہے وہ مینگل کر رہا ہے لیکن اس کو یونیک بنا رہا ہے so it can call the correct function operator یا function overloading is fairly exciting and i would strongly recommend کہ آپ اس کو تھوڑ سے اپنے لیے try کریں کچھ آپ کو ایک سامپلز مل جائیں گے کتاب میں بہت ساری ایک سامپلز ہیں آپ کے ہینڈائوٹس میں بھی ایک تو ہم نے لکھے ہوئے لیکن اپنے بے لے بھی لکھیں and convince yourself that function overloading actually works یہ کچھ باکرونڈ ایک سامپلز تھیں see plus plus جو انٹروڈیوز کی اس نے over the see لنگویج formerly we will get into classes and objects next time and you will نوٹس کہ یہی جو چیزیں ہیں یہ بار بار آپ استعمال ہونے لگھ پڑیں گی so till next time خدا حافظ