 السلام علیکم، today's lecture number 42 of our course CS201 Introduction to Programming پچھلی دفعہ آپ کو یاد ہوگا ہم نے ٹیمپلیٹ فنکشنز کے بارے میں بات کی تھی اور میں نے آپ کو بتایا تھا کہ ٹیمپلیٹ فنکشن وہ ہے جو ہم فنکشن لکھتے ہیں جہاں پر ہم جناریک ڈیٹا ٹائپ سستمال کرتے ہیں اور اس کی ایک Motivation یا Rationalization میں نے اس طرح سے کی تھی کہ جب بھی آپ کو لگے کہ آپ ایکی کسم کا فنکشن بار بار لکھرہیں so you're writing code that looks very very similar in fact identical except for the fact کہ اسکن دیتا تیپ بدل رہے جہی نہیں کہیں آپ انٹ کے لیے وہی پورا فنکشن لکھرہیں اور کہیں آپ دبل کے لیے لکھرے ہیں یا چار کے لیے لکھرے ہیں and so on تو اس وقت you should consider writing a templatised version of that function which means now a generic data type کے لیے ایک function لکھ لیا جائے اس کے لیے ہم نے keyword template اور پھر angle brackets ڈیوز کیئے تھے کہ یہ template class t, t was a temporary space holder and t represents our generic data type اس کے بعد یہاں سے شروع کر کے آپ function لکھتے ہیں اور جہاں جہاں آپ نے وہ data type استعمال کرنی ہے وہاں پہ آپ t لکھتے جاتے ہیں function کا یہ a generic template بن جاتا ہے جب یہ template ہم استعمال کرنے جاتے ہیں اور اپنے program کے اندر اس function کو call کرتے ہیں with a particular type of data تو compiler automatically یاد رکھیں یہ compile time کی بات ہے automatically detect کرتا ہے کہ جب کس کسم کا data اس function کو پاس کیا جا رہا ہے جب وہ دیکھتا ہے کہ یہاں پہ آپ int کے ساتھ اس function کو call کر رہے ہیں تو جہاں جہاں آپ نے original template کے اندر t لکھا تھا وہاں پہ int لکھا جاتا ہے اور ایک نئی copy function کی generate کر لیتا ہے compiler اور وہ compile ہو جاتی ہے object code میں آپ کے program کے اندر شامل ہو جاتی ہے the same thing applies basically to any other data type that you might want to use with the same function so ایک template کے ساتھ سمجھ لیں آپ نے ایک family of functions create کر لی ہے جن کی نویت یعنی جو وہ کام کرتے ہیں وہ کام ایک کسم کا ہے لیکن ان کے data type مختلف ہے اگر آپ ایک اسی نمبر کو square کرنا چاہتے ہیں تو آپ نے square کا function لکھا تو اس کو int سے call کر لیں دبل سے call کر لیں اور float کے ساتھ call کر لیں وہ کام کرے گا اگر وہ template version ہے اور اگر وہ آپ اللہدہ لکھنا چاہیں تو پھر آپ کو اس کو overloaded variety میں لکھنا پڑے گا آپ کو ہر data type کے لیے اللہدہ اللہدہ function لکھنا پڑتا تھا so template functions have a good use they promote code reuse and not only that major advantage ہے کہ جو آپ نے ایک دفعہ code لکھا اور اس کو دیکھ لیا کہ اس کا logic ٹھیک ہے تو پھر آپ کو دبارہ سے اس کو لکھنا نہیں پڑتا اور کوئی زیر ضبر کی بھی گلتی اس میں نہیں ہوتی the question is کہ اس کو debug کیسے کیا جائے test کیسے کیا جائے اس کے بارے میں تھوڑے سے میں hints اور pointers آپ کو دے دیتا ہوں کہ actually template function کا لکھنے کا طریقہ maybe reverse میں آپ اپنایں اور باد میں جاکے جیسے ڈیولیپ ہو جاتی ہے پھر آپ سیدہ سیدہ template function لکھیں اگر reverse ٹیکنی کی استعمال کرنی ہے جب آپ کو پتا ہے کہ یہ آپ کے function نے کرنا کیا ہے تو آپ کوئی بھی ڈیٹا طاپ اپنی لیں target data طاپ for example آپ ڈ کے لیے function لکھنا چاہتے ہیں تو پہلے آپ ڈ کے لیے پورا function لکھ لیں اور اس کو test کرنے once you've tested it and you satisfied that it works with hints پھر آپ اپنے ڈیٹر میں جہاں جہاں function میں int لکھا ہوا تھا اس کو replace کر دیں ڈی کے ساتھ اس کے نام سے پہلے template class ڈی والا clause ڈال دیں اور template بن گئی لیکن اس کو پھر بھی آپ کو test کرنا چاہیے اور thoroughly test کرنا چاہیے کیونکہ جو code compiler ڈیڈرٹ کرتا ہے وہ آپ کو ڈیٹر میں نظر نہیں آتا یعنی وہ ایک automatic magic ڈیٹر کیشن کی چیز ہے جو کہ compile time میں آپ کے لیے ہو جاتی ہے جب یہ چیز automatically آپ کے لیے ہو رہی ہے تو compile کرنے سے پہلے آپ code ڈیک نہیں سکتے اسی طرح سے اس کو ڈیبگ کرنا بھی اتنا ہی مشکل ہو جاتا ہے کہ اگر compiler ڈے کہ کہیں پہ ڈیٹر آرہا ہے یا چلتے وقت کوئی run time ڈیٹر آجائے تو پھر آپ code میں کہاں پہ اس کو ڈھوندیں گے this is an issue but nonetheless اگر آپ properly design کر کے template ڈیٹر لکھتے ہیں تو اس کا بہت زیادہ فائدہ ہے in terms of code reuse آج ہم اسی concept کو تھوڑا سے extend کرنا چاہتے ہیں اور ہم بات کرنا چاہتے ہیں template classes کی اب function کی میں نے آپ کو تھوڑ سی justification دی what about classes themselves what about کہ یہ ہم ایک data type ڈیٹر کرنا چاہتے ہیں جس کا پورہ behavior کیونکہ اب میں function کی بات نہیں کر رہا تو data type میں میں اب behavior کی بات کروں گا کہ اس کا سارہ behavior ایک قسم کا ہو لیکن کبھی ہم چاہیں تو وہ int کے لیے استعمال ہو جائے یا چار کے لیے ہو جائے یا ڈبل کے لیے ہو جائے یا float کے لیے ہو جائے and so on so it is a case of defining a complete interface and implementation but defining it in a generic fashion کوئی example آپ کے شاہل میں آتا ہے one has to think of کہ یہ کہاں پہ template class کا use جائے گا کہ یہ class ایک قسم کی ہو لیکن ہمیں اس کی ضرورت پڑ جائے different data types کی لئے کچھ میں آپ کو ایک سامپل دینے کی کوشش کرتا ہوں یہ ایک سامپل ایک چلی تو it is looking into the future a little bit کیونکہ ڈیٹا سٹرکچرز کے کوس کے اندر آپ اچھی طرح اس کو استعمال کریں گے but for the moment let us talk about a data structure called a stack stack کیا ہوتا ہے ہم بار بار باتوں کرتے رہے ہیں کہ جیو function کو call کرتے ہیں تو stack پر values لکھی جاتی ہیں پھر اسے اٹھائی جاتی ہیں so we should try to understand how does a stack work what its properties are and then see can we make it generic what is a stack شادی پہ آپ گئے ہیں کبھی دینر کھایا ہے وہاں پہ دیکھیں کھانا کیس طرح سے صرف ہوتا ہے بارتوں کے اندر چاول اور اچھی اچھی کھانے کی چیزیں پڑی ہوتی ہیں ان ساتھ پلیٹیں پڑی ہوتی ہیں پلیٹیں نوٹس کریں تو وہ علیدہ علیدہ نہیں رکھیوں ان کو اوپر نیچے رکھا ہوئے they are lying in a stack آپ ابھی کبھی کسی mess میں کھانا کھائیں تو وہاں پہ بھی پلیٹیں آپ کو stack میں ملتی ہیں mess فالہ stack جو ہوتا ہے وہ usually کسی کسم کا container بنائے ہوتا ہے جس میں شہد rods بھی لگی ہیں ان کے درمیان میں پلیٹیں ڈالی ہونیچے spring لگا ہو پلیٹ اٹھاتے جائیں دوسی پلیٹ تیچے سے اوپر آتی جائے لیکن اس کی ایک property سمجھیں although ہم کئی دفعہ یہ properties کو مطلب violate بھی کر دیتے ہیں لیکن اگر پلیٹوں کے حوالے سے آپ بات کریں تو اگر ایک صاف پلیٹ آپ نے رکھنی ہے تو وہ اس پایل کے اوپر رکھیں گے دوسی اگر پلیٹ اوپر رکھنی ہے تو پھر پایل کے اوپر رکھتے ہیں یعنی پلیٹ نے add کرنے کا طریقہ وہ صرف ایک جگہ پہ ہے کہ یہ stack کے اوپر رکھی جائیں اسی طریقے سے اگر ہم نے پلیٹ اٹھانی ہو تو ہم اوپر سے اٹھاتے ہم نیچے سے کھنچنے کی کوشش نہیں کرتے اس میں سے تو آپ نیچے سے کھنچنے ہی سکتے کیونکہ اس کے سائد پر روڈز لگی ہوئی ہیں اور پلیٹیں آپ صرف اوپر سے اٹھا سکتے ہیں یا اوپر سے رکھ سکتے ہیں This is truly a stack Properties کی کیا ہے کہ جو اخیر میں چیز دالی جائے گی وہ سب سے پہلے اٹھائے جائے گی In English we call it last in first out یہ آپ بار بار سنیں گے اور یہ دیتا سٹرکچس میں آپ کو کافی دفہ دیکھنا پڑے گا کہ یہ first in first out کیا ہوتا ہے and so on but for the moment let's talk about this stack میں نے آپ کو ایک سامپل دیدیا a stack of plates کا اب ہم اگر programming کی طرف آئیں تو stack کا concept آپ کو اس سے سمجھا جائے گا کیونہ آپ جو چیز ہم اس میں ایڈ کرنا چاہتے ہیں وہ ہم اوپر سے ایڈ کرتے ہیں اور جو ہم چیز نکالنا چاہتے ہیں تو جو اخیر میں چیز ایڈ کی گئی تھی وہی چیز ہم نکالتے ہیں اس کے ساتھ آپ نمبرز کا stack بنالیں انٹز کا stack بنالیں دبل کا بنالیں فلوٹ کا بنالیں کریکٹر کا stack بنالیں کوئی فرق نہیں پڑھتا as long as it implements this property and it has a size and you can place things in it and remove them the concept is کہ جی stack اگر آپ سمجھیں تو ہم ایک class کی بات کر رہے ہیں لیکن یہاں پہ class کا behavior ہم نے define کر دیا ہے ہم نے کہا ہے کہ جی وہ class behavior کیسے کرے گی اس کا interface کیا ہوگا لیکن وہ class hold کیسے چیز کو کرے گی کیسے کسم کا data ہوگا اس stack کے اندر وہ data ہم کہہ رہے ہیں کہ یہ variable ہو سکتا ہے چاہے تو ہم پلیٹوں کا stack بنالیں چاہے تو ہم انٹز کا stack بنالیں چار کا بنالیں فلوٹ کا بنالیں جب ہم computer کی طرف بات کرتے ہیں اپنی programming میں so here is a good candidate for a templatized class کہ class پوری کی پوری کچ اس طری کیسے define ہو جائے کہ جناب جب ہم اس کو instantiate کرنے جائے یا اس کو استعمال کرنے جائے اس کے objects کرنا چاہے تو اس وقت اس کو کہے کہ جناب ہمیں integers کا stack بنادو یا ہمیں doubles کا stack بنادو and so on so here is a little bit of a justification for reuse of a class level code باقی جو فائدِ نقسان تھے وہ تقریبا اسی level پر رہتے ہیں جو کہ functions کیلئے ہم نے بات کی تھی اگر آپ ایک class پوری کی پوری develop کر سکتے ہیں اور اس کا interface define کر سکتے ہیں اس کے data members کیا ہوں گے اس کے member functions کیا ہوں گے کس طرح سے وہ بھیحیف کریں گے تو خود ہی سوچیں کہ ہماری کتنی ساری effort جو ہے وہ بچ گئی ہے by just defining one templatized class and then using it to instantiate objects of many different types not many different objects but objects of many different types so in a way the whole class is replicated compiler کا behavior بالکل وہی رہتا ہے جو کہ templatized functions کے ساتھ تھا in other words جب ہم ایک class کو کسی نئی data type کے ساتھ ایک templatized class کو نئی data type کے ساتھ instantiate کرنا چاہتے ہیں تو in a way compiler دیکھ کے پوری class کا ایک version بنا لیتا ہے جس میں her function her data member her structure اس سے affect ہو جاتا ہے جہاں جہاں بھی ہم نے وہ generic data type کے ساتھ دیزائن کی تھی class وہاں پہ ہم جو بھی data type سپیسیفائے کریں گے یعنی in double float وہ وہاں پہ آجائے گا in fact if you think about what we talked about when we were talking about template functions ہم نے اس کی بھی بات کی تھی کہ جناب object کیا چیز ہے یا class کیا چیز ہے تو class تو user defined data type ہے اگر user defined data type ہے تو اسی templatized class کے ساتھ ہم اپنے user defined data type کی ایک اور class بھی بنا سکتے ہیں in other words we are not restricted to creating copies of this class for only the native data types like in double float we can also create copies of this class of our own data types now this is really extensibility یاد رہے جب بھی میں c++ کی بات کرتا تھا میں کہتا تھا it's an extendable language ہم اس کے اندر اپنی چیزیں define کر کے اس کو extend کر سکتے ہیں لیکن اب یہ اس سے کہیں آگے ہم گزر چکے ہیں شروع ہم نے کیا تھا کہ جی native data type سے بڑھ کے ہم اپنی classes define کر کے ان کے operators define کر لے تو ایک نئی data type بن گئے اب ہم بات کر رہے ہیں کہ جی ایک function لکھا اور اس سے bcوں کے اسم کے different functions automatically generate کروالی ہے اور آج ایک class لکھی اس طرح سے لکھی ایک generic اسم کی class کہ اس سے جس بھی data type کے ہم ایک SPECIFIC class بنوان چاہیں وہ class بن سکے شاہتہ ہیں중에 you can think of a very SPECIAL robust amp Wide every time you use it You can specify는지کی ش�ک fierce حارص کرنے چاہی ہے اس کی انکہ رنگ how are not انو اہو تو team find کی Li اسumpingا کوپی ان'ہ傾 کو بنوان د Abigail چلے آئے دیکھتی ہیں کجییں generic you need template classes than تیکس کیا ہوتا Mein fact it is so simple that it's almost the same as what we use for template functions عبر آپ شروع کرتے ہیں پھر انگل برکٹس کلاس ٹی۔ اگر مجھے رہے ہیں کہ ٹی is a place holder جب ہم اس کو استعمال کرنے جائیں گے تو یہ چیز ہے جو رپلیس ہوگی بھی دیتا ٹی پر دیتا ٹائپ۔ لہذا ہم کلاس ٹی و کلاس ٹی within انگل برکٹس اس کے بعد کلاس کی نورمل دیفنیشن شروع ہو جاتی ہے۔ all you have to do is in the نورمل دیفنیشن of the کلاس جہاں جہاں آپ کو دیتا ٹی چاہیے وہاں آپ ٹی لکھتے جائیں گے۔ For example, اگر آپ ایک کلاس ہے جس میں انٹ لکھنا چاہتے تھے اور اب انٹ وہ جیز ہے جس کو آپ رپلیس کریں گے کہ جو کبھی انٹ ہو سکتا ہے کبھی دبل ہو سکتا ہے تو اوپر ٹی جب لکھتیا تو نیچے جہاں انٹ آئے گا وہاں آپ ٹی لکھتے جائیں۔ یہ دیکھ لی جے گا کہ جن آپ کئی دفعہ ہم انٹیجرز ویسے ہی استعمال کر رہا ہوتے ہیں کلاس اس کے اندر. For example, اگر میں نے کوئی ویکٹر یا ایرے بنانا ہے تو اس کا سیس جو ہے will be an integer. But the ایرے میں بھی an array of 4 or doubles of floats or something else. So don't confuse the usage یہ خیال رکھیں کہ جہاں پہ آپ نے ٹی لکھنا ہے وہی پہ ٹی ہو. So let's start again. All we do is we start with the template class t line. Then start defining a class in an ordinary fashion. لیکن یہاں پہ بھی ہم جنریک ڈیٹا ٹیپ کو رپلیس کرنا چاہیں گے بعد میں وہاں پہ آپ ٹی استعمال کرتے جاتے ہیں. ٹی کی جگہ پہ ٹی استعمال کریں بی کریں سی کریں that is your choice. Usual usage جو ہے عم طور پہ وہ ٹی لکھا جاتا ہے. Class definition اور اس کے functions وگرہ سب آپ نے ڈیفائن کر دینے ہیں اس طریقے سے. Member functions کیسے کریں گے. Member functions آپ کو یاد ہوگا نور ملی ہم ڈیفائن کرتے ہیں. جب بہر ڈیفائن کرنے گے Member function کو تو پھر آپ لکھیں گے. Template class t دوبارہ سے پھر آپ class لکھیں گے. Class کا نام اور پھر آگے class کے نام کے فورن بعد angle brackets میں آپ t لکھتیں گے اور پھر scope resolution operator جو ہے double colon function name اور پھر اس کے arguments یا parameters اور پھر function کی body آئے گی اور body کے اندر پھر جہاں جہاں t کی ضرورت ہے وہاں آپ t لکھتے جائیں گے. جہاں رہے جہاں پہ بھی آپ یہ generic ڈیٹر تائپ لکھ رہے ہیں t جب آپ class کو استعمال کرنے جائیں گے وہاں پہ compiler replacement کرے گا. تو آپ نے سوچنا ہی اس طریقے سے ہے جو میں نے آپ کو function prototype یا function definition بتا ہے it's no different from your normal way. لیکن ہم normalی لکھتے ہیں class name پھر scope resolution operator جو ہے double colon اور پھر function name پھر اس کے argument list اور پھر function کی body. یہاں پہ صرف فرق کیا رہا ہے کہ class name کے بعد angle brackets کے اندر آپ نے پھر وہ generic ڈیٹر تائپ دیدی یعنی t اور پھر اس کو function کے اندر استعمال کیا. یہ تو ہوگی class کی definition. جب آپ class کو استعمال کرنے جاتے ہیں یعنی the clients of the class which normally are our main program یا other functions. وہاں پہ آپ اس class سے کچھ objects کو declare کرتے ہیں. تو for example ہمارے پاس ایک class ہے number تو ہم کہتے ہیں number x. normally x کہہ دینہ کافی ہے اب ہم یہ کر رہے ہیں کیونکہ یہ template class ہے تو number کے ساتھ بتانا پڑے گا. جیسنہ کسم کا number. so let's take a look at the code for this very very simple number class. اس code کی اندر یعنی ہم کہتے ہیں کہ یہ چھوٹی سی class بنانے لگیں یہ ایک number store کرے گی اس کو initialize کر سکتے ہیں اس کو display کر سکتے ہیں print کر سکتے ہیں. so class کی اپنی basic definition simply starts with template class t class number اور اس کا جو data member ہے that will be t let's call it number. number کہتے ہیں my number کہتے ہیں تین تا کہ وہ class name سے زرہ differentiate ہو جائے. so we can say t my number that is a private data member ابھی یہی تک رکھ جائے. لیکن جب ہم اس کو استعمال کرنے جائیں گے اگر میں کہتا ہوں کہ انٹیجر والا number generate کرو تو اس t کی جگہ پہ انٹ لکھا جائے گا as long as you understand that you understand everything else now take a look at the code it's a very simple few lines ہم نے پوری اس کو flesh out نہیں کیا اور پھر دیکھیں اس کا استعمال کیسے ہیں کہ جب ہم اپنے main program یا اپنے function کی اندر اس کلاس کا کوئی object بنانے جاتے ہیں تو اس وقت ہم بتاتے ہیں کہ یہ کس کسم کا number ہوگا اور بتانے کا طریقہ کیا ہے ہم کلاس کا نام لکھتے ہیں اور پھر اس کے فورن بعد انگل برکٹس کے اندر دیتا تاپ دے دیتے ہیں. for example number اور پھر انگل برکٹس کے اندر ہم نے لکھتیا انٹ اور پھر آگے لکھتیا x now you should read this line as x is an object which is of the type number یعنی کلاس اس کی number ہے لیکن number کا parameter جو ہے وہ انٹ ہے اور سوچنے کا طریقہ یا analyze کرنے کا طریقہ یہ ہے کہ جو number کلاس ہم نے define کی وہاں جہاں جہاں تی لکھا ہوا تھا وہاں اس وقت انٹ لکھا گیا again this is done automatically by the compiler for us so there's a little bit of magic involved you will not see before the compiler completes this job آپ کو یہ کلاس انٹ کے لیے بنی ہوئی نظر نہیں آئے گی لیکن compiler نے internally یہ پوری کی پوری کلاس کی ایک کوپی جو ہے وہ انٹ کے لیے generate کر رکھی ہے اور پھر اس کو استعمال کرے گا اسی طریقے سے اگر ہم کہدیں number اور angle brackets کی اندر لکھنے دبل اور آگے y لکھنے تو y becomes an object of type number within the type number وہ جو اس کی generic data type تھی that has now been replaced by type double so t کی جگہ پہ دبل آجائے گا and again a whole copy of the کلاس will be made with t replaced by double everywhere and the program will compile and run so it is quite useful and a big shortcut ایک چھوٹیسی ویرییشن بتاتا چلو کہ ہم نون طیب پرامیٹرز جو ہم وہ بھی ٹیمپلیٹس میں استعمال کر سکتے ہیں now what does this mean نون طیب پرامیٹرز دیکھیں ہم ٹیمپلیٹ کلاس ٹی تو لکھتے آئے ہیں پر اگر میں چاہوں کہ جی ٹیمپلیٹ کلاس ٹی کاما انٹ سمتھنگ لکھ سکوں انٹ ٹیمپلیٹ سمتھنگ لکھ سکوں انٹ ٹیمپلیٹ سمتھنگ لکھ سکتے ہیں جو نون جنیریک ٹیپ ہم نے استعمال کر لی یہ ایک کسم کا کونسٹرینٹ ٹیٹ ہوگا within the class definition so we can use a name over here انٹ ٹیمپلیٹس جیسے کیا ہے اور پھر کلاس کی definition کی اندر جہاں بھی ہم elements کا word استعمال کریں گے وہاں پہ جو value پاس کی جائے گی وہ وہاں پہ رپلیس ہو جائے گی now آپ کو یاد ہوگا کہ جب بھی ہم arrays ڈیکلیر کرنے جاتے ہیں when we say in't x or square بیکٹس کے اندر کوئی نمبر دیتے ہیں وہ نمبر جو ہے it has to be a constant it can't be a variable so we have to say in't x100 یا in't x5 یا اوپر شاپ ڈیفائن کے ساتھ کوئی نام associate کریں نمبر کے ساتھ وہ constant ہے یا اوپر کوئی constant integer ڈیفائن کریں اور پھر اس کو استعمال کریں تو یہاں پہ جو non-type parameter ہے that in a way behaves like a constant and we can use it to dimension things جب ہم class کو instantiate کرنے جائیں گے وہاں پہ آپ کو پھر صرف t کی جگہ پہ رپلیس منٹ نہیں چاہئے بہت t comma جو بھی آپ نے non-type parameter دیا ہے اس کی بھی value دینا پڑے گی اور وہ پھر class کی definition کی اندر استعمال ہوتی ہے لیکن this is a minor point. The major one was t and its replacement within the class. Now let's move on. I hope the concept of a template class is clear. ہم نے ایک وہی بات جو کل پسلے لیکچر میں ہم نے بات کی تھی کہ جناب ایک template کارٹلی اور اس کو رکھ کے ہم نے بیشاق گتے کا ٹرائنگل کارٹیں یا لکڑی کا کارٹیں یا لوہ کا کارٹیں ہم نے a template بنالی ہے functions کے حوالے سے وہ ہم نے بات کی تھی اسی طریقے سے اگر آپ کلاسز کا سوچیں تو وہی بات ہو رہی ہے کہ جی ہم نے ایک خاقہ بنالی ہے ایک template بنالی ایک دبے کی فرح اگرامپو اب دبے کو آپ سمجھ لیں کلاس ہے لیکن یہ نہیں بتایا کہ وہ دبہ لوہ کا بنے گا کوپر کا بنے گا لکڑی کا بنے گا لیکن دبے کی پوری ساخت اور اس کے member functions کھلے گا بند ہوگا تالہ لگے گئی اٹسی اٹرہ وہ ہم نے define کر لییں کیونکہ دبے کے یہ common parameters ہیں اور پھر جب ہم اس کے objects instantiate کرنے جاتے ہیں تو ہم کہتے ہیں کہ جی لکڑی کا دبہ بنا دو لوہ کا دبہ بنا دو اٹسی ٹیٹرہ the methods used are exactly identical so we save a lot of effort and labor and the other one is the other big motivating factor is code reuse or reuse بھی اس کسم کے کوڑ کا جو کے tested and tried ہیں for that particular problem let's move on and look at certain implications for template classes for example static member variables کیا ہوتا ہے جب ہم ordinary classes کی بات کر رہے تھے اس میں آپ کو یاد ہوگا کہ جی ہم static member variables استعمال کر سکتے تھے اور پھر میں آپ کو بتایا تھا کہ جی static variable ایک ایسا ہوتا ہے جو کہ پوری کلاس کے لیے ایک copy اس کی بنتی ہے جو ordinary member data ہے اس میں تو ہر object کے لیے ایک copy data کی بنے گی یعنی کسی میں اس کی let's say date of birth is a member data of a class تو ہر object جو ہے ہر person جو for example آپ انسانشیٹ کر رہے ہیں اس کے اندر date of birth کی different value ہوگی لیکن اگر اپنے ایک static member declare کیا ہوا ہے number of persons تو اس پوری کلاس کے لیے number of persons ایک variable ہوگا and normally we can use a constructor and a destructor to increment or decrement this one static member what happens when this static member happens to be part of a template class well the answer is کہ جب آپ اس کلاس کو انسانشیٹ کرنے جائیں گے اور آپ انسانشیٹ کے دو حصے ہیں ایک تو ہے object بنانا اور دوسرا حصہ ہے کس کسم کا object بنانا حالا کہ اس کلاس کے اندر ہی رہے کہ ہم بات کر رہے ہیں so for example number int x جہاں انٹ ہم نے angle brackets میں لکھا ہے it says کہ جی x object ہے generic class number کا لیکن اس کی SPECIFIC TYPE ہے انٹ اور اسی طرح فلوٹ اسی طرح ڈبو تو جب ہم number class کے اندر کوئی static variable introduce کر دیتے ہیں تو ہوتا یہ ہے کہ جب بھی آپ کلاس کو انسانشیٹ کرتے ہیں آپ نے اگر int سے انسانشیٹ کی تو int set of objects کے لیے ایک static variable کی copy بن گئی اسی number class کو آپ نے float کے لیے انسانشیٹ کیا تو تمام float number کے لیے ایک static member کی copy بن گئی so the static member is static یعنی one copy for that type of object so all objects پھر بیشا کا دس number int والے بنائیں ایک static member ہوگا جو کہ int پہ افکٹ کرے گا یا ان کے ساتھ انٹریکٹ کرے گا اسی طریقے سے آپ ڈبلز کا اگر number بنالیتے ہیں پندرہ بنالیں different objects تو ان کے لیے ایک ڈبلز سے static value ہوگی اب یہ static value class wide نہیں ہے یہ SPECIFIC class wide ہے اگر آپ سوچیں this makes logical sense اگر پورے process کو آپ یاد رکھیں process کیا ہے کہ compiler نے آپ کا code پڑا function کا یا اور اس کے مطابق اس ٹیمپلٹائز کلاس کی پوری copy بنالی اس copy کا نام compiler اندر ہی رکھے گا ہم نے تو number رکھا تھا شہد وہ کوئی اور نام generate کر لے so in a way it has generated a new unique class once it's generated a new unique class جس کے اندر t course نے replace کر دیا انٹ کے ساتھ تو اس unique class کا static member variable behaves exactly like جو ہماری ordinary class کا static variable بھیپ کرتا تھا اسی طریقے سے اس نے ڈبلز کے لیے پوری copy بنالی تو اس کا بھی unique name ہوگا اور پھر اس unique name والی copy کی اندر جو static variable گیا ہے وہ ڈبلز والے numbers کو affect کرے گا اور ان کے ساتھ وہ interact کر رہا ہوگا so it makes logical sense کہ جی static variables are instantiated once for each type جہاں پہ ہم class کو instantiate کرنے جارے ہیں جہاں پہ بھی ہم نے generic data type کو replace کیا ہے with the specific data type the next point is that we can replace the generic data type with our own data type now this is slightly tricky when I say our own data type I'm talking about ہم نے کلاس لکھلی ہے ہم نے لکھلی a class called person ادھر ہم نے ایک generic class بنالی ہے called ڈبلز ایرے کے اندر تو ہم کہتے ہیں کہ جی o angle brackets کے اندر int like case کو instantiate کرلو ڈبل like case کے instantiate کرلو so that will mean an array of integers it will mean an array of doubles and so on what about an array of persons well if we have defined a class called person تو we can have an array of persons because person now behaves like another data type user defined or not user defined doesn't matter at this stage so in fact آپ کے پاس بہت ساری power آگئی ہے لیکن وہ جو ہم نے functions کی بات کی تھی اور پھر classes کے اندر ہم نے ان کو extend کیا تھا تھوڑس آپ کو خیال یہ رکھنا پڑے گا جار آپ generic class کے اندر یعنی temperate class کے اندر اگر کوئی اپنہ object استعمال کر رہیں اپنی class استعمال کر رہنے to be more accurate than it must support the functions یا interfaces جو کہ یہ generic structure require کرتا ہے so don't put in something that cannot be used by this generic structure. I'll refer you back to an example that we discussed ہم نے ایک phone call کا example discussed کیا تھا اور اس کے اندر کہا تھا کہ جی reverse جو ہے وہ minus x کر کے واپس کر دیتا ہے آپ کو یاد ہوگا پھر ہمیں phone call کے لیے minus operator ڈیفائن کرنا پڑا تھا and we said کہ جی minus جو ہوگا اس کا bill code بدل جے گا اگر number pass ہوگا تو minus your number کو reverse کر کے یعنی minus کر کے واپس کر دے گا لیکن phone call کے اندر اس کا behavior بدل گیا تھا so you have to take care of these things whenever you use a templatized class and within that class you instantiated for one of your own classes just make sure that you have compatible function calls in there any member functions behave properly the way we want them to behave let's move on and take a look at another issue جو کہ ہم classes میں بار بار استعمال کرتے ہیں اور دیکھیں کہ اس کو template classes میں کیا ہوتا ہے that issue is friend functions یاد ہوگا کہ ہم functions کو friend declare کر سکتے ہیں اور اس کی بھی ضرورت کئی دفعہ پیش آتی ہے میں اس کو تھوڑا سا recap کرتا چلوں دیکھیں for example ایک operator ہے ہم نے اپنی class کے لیے those operator کو define کیا ہے let's take plus plus as you know is a binary operator اس نے a plus b کو implement کرنا ہے جب بھی ہم ایک class کے لیے for example plus operator کو implement کرنے جاتے ہیں تو plus کو call کرنے والا object left side پہ ہوتا ہے یعنی ایک object ہوتا ہے جو plus کو call کر رہا ہے اور plus operator کو وہ object جو ہے this pointer کی through ملتا ہے اور پھر اس کو ایک argument پیش کیا جاتا ہے جو plus کے right hand side پہ ہوتا ہے یعنی b لیکن اب اگر یہ equal نہ ہوں ہمارے پاس a جو ہے وہ object ہوں ہماری class کا اور plus کے بعد کوئی ordinary data ڈیٹا ٹائی کی نہیں int لکھا ہو so we have something like a plus two جہاں a جو ہے وہ ایک object of our class or two جو ہے ordinary int ہے تو یہ plus operator has to behave intelligently so we overload it within the class definition what happens when we say two plus a making ordinary int کے اندر تو two plus three is the same as three plus two so we would want the same behavior in a class we would want a plus two to be behaving the same way as two plus a جہاں پہ a جو ہے is an object of one of our own classes so اس کے لیے ہم overload نہیں کر سکتے member function کو کیونکہ جب two plus a لکھتے ہیں تو plus operator کے left hand side پہ تو int لکھا ہو ہے اگر وہ int ہے تو it is not a member function of this class member function یا member operator کی لیے left side والا object جو ہے وہ class کا member ہونا چاہیے یعنی class والا object ہونا چاہیے تو جب بھی ہم two plus a لکھتے تھے اس کے لیے ہمیں friend function لکھنا پڑھ جاتا تھا اور پھر کیونکہ ہم اس function کے تھوے class کے private data members کو manipulate کرتے تھے we wanted that function to have access to the private data and the only way an external function which is not a member function can have access to private data of a class is if we declare that function to be a friend of the class so یہ موٹیویشن تھی friend function کی question is when we write a template class اس کے اندر friends کا بیحیویر کیا ہوتا ہے for example ہم اپنی template class کے اندر اگر لکھتے ہیں friend let's say f f is the name of the function میں نے void or data types او گرہ کو چھوڑ دیا کیا چیز ریٹرن کرتا ہے کیا چیز نہیں تو تو کوئی بھی template ہو سکتی ہم نے کہ friend f parenthesis what this says is the function f is a friend of this class question is یہاں تو templateized class ہے اور templateized class کی ہم نے بات کی ہے کہ جب بھی ہم اس کا object بنانے جائیں گے تو ہم بتاتے ہیں کہ جناب کس کسم کی class generate کرنی ہے انٹ کی کرنی ہے دول کی کرنی ہے ہماری کسی کلاس کی version جو ہے وہ جنریٹ کرنا ہے یہاں پہ جب ہم نے لکھ دیا friend f تو f becomes a friend function for all classes generated using this template so it's very very global and f will have access to the private data structure of any and all different classes which are instantiated using this template class اسے آگے چلیں ہم اگر کہیں کہ جناب جو friend ہے وہ اس کے argument list کے اندر ہم تی لکھ دیتے ہیں اب اگر وہاں پہ آپ نے اسپیسفیک او بھی مطلب کلاس کی instantiation کی ہے for an integer اور f کے ساتھ آپ نے int لکھ دیا ہے اور اسی طرح angle bracket سستمال ہوں گے جس طرح آپ سنٹیکس دیکھ رہے ہیں کہ یہاں ہم دیگر بعد ہم جانا ہوسے وهو دیا ہے کہ یہ آپ نشترانا ہے اگر آپ نے اسی محنگا ہے اس سے جاتا ہے تو یہ اگر آپ نے اپنے محنگ۔ transcene اپنا اس پر تھی پر کلکان کی حق سکتے ہیں۔ہنو جو ساکتا ہے کہ اپنے محنگ جاتا ہے اس میں اپنے محنگو ایک کلاس کی حق سکتے ہیں اس کے ل گے آپ کے بارے کلاسم مطلب پر اپنے محنگو کلاس سے ایک کلاس کی لئے ہم وہ اپنے محنگ گر Want ڈی تو آنجا دیتے ہیں friends class y , تم پیٹ کلاس کے اندر یہ لائن لکھتی friends class y what that means is that the class of y جیتنے ممبر فنگشن ڈیس کلاسی گی are now totally friends ڈیس کلاسی گی any all memory functions of the class y can access the private data of any and all class types generated using this template so for انٹ کے لیے ہم نے جنریٹ کی ایک کلاس تو وائے کے سارے ممبر فنکشنز انٹ والی کلاس کے اوپڈیکس کے دیتا سٹرٹور کو حنل کر سکتے ہیں. دبل کے لیے ہم نے انسٹینچیٹ کی اس ٹیمپلٹ کلاس سے تو کلاس وائے جو بہر بیٹھی ہوئی ہے اس کے ممبر فنکشنز جو ہیں وہ اس کے سارے دیتا سٹرٹور کو حنل کر سکتے ہیں دبل version کے ساتھ بھی اسی طریقے سے اگر ہم کہدیں فرنڈ ایک کولن کولن فنکشنز جو اس کے ممبر فنکشنز ہے اگر ہم نے پوری کلاس کو ایکسس نہیں دیا اس میں سے کسی ایک فنکشن کو ایکسس دے دیا اگر ہم اس کے ساتھ تی استعمال کرنے لگ پڑیں اسی انگل بریکٹس کے ساتھ تو ایکدم سپیسفک ہو جاتا ہے یہ جو فرنڈ فنکشن ہے بہر والی کلاس کا ہو علیدہ سے جنریک بہر فنکشن ہو اکیلہ بیٹھا ہوا وہ اس ٹیمپلٹ سے جو بھی ٹی کسم کی کلاس ہوگی انٹ کے لیے یا دبل کے لیے جو بھی ہم استعمال کریں گے صرف اس کے لیے فرنڈ ہوگا باکی version کے لیے فرنڈ نہیں ہوگا so there are many variations of this friend theme which applies to ٹیمپلٹ آئیس کلاس اس چلے آئیے ان کنسپٹس کو کسی ایک سپیسفک اگزمپل پہ اپلائے کر دے ہیں let us try to make the class called stack but make it in a generic fashion یہ اگزمپل آپ کی کتاب میں بھی دیا ہوئے so i would strongly recommend that you read through the code but not just read through it what you should do is actually try to punch in the code develop it and write your own testing programs and see how it works کتاب میں کچھ اور کمپلیکس اسیوز بھی ہیں لیکن don't get into them just try to write the template class جناب سٹیک کو ہم نے کہا تھا کہ جناب اس کے اندر کچھ properties ہیں وہ properties کی ہم بات کرتے چلتے ہیں پہلے ہم نے کہا کہ جی ایک تو ہمیں پتا ہونا چاہیے کہ سٹیک میں اس وقت کہاں پہ ہم ہیں so there's a concept of a stack pointer now it's not that pointer so don't worry about it ہم سمپل ایرے رکھ لیں گے اب وہ ہی آپ تصور کریں کہ وہی پلیٹوں کا سٹیک ہے آپ کے پاس آپ نے یہ دیکھنا ہے کہ جی کتنی پلیٹیں آگئی ہیں سٹیک کے اندر اور کیونکہ ہم صرف ایک پلیٹ کے ساتھ دیل کر رہے ہیں جو سب سے اوپر ہے رکھی گئی یا اوٹاری تو پوینٹر کو ایک جگہ بھی پوینٹ کرنا ہے which is at the top of the stack اس کے بعد اس کی جو ایک ارے کے اندر ہم چیزیں رکھیں گے اس کو ہم جنیریک بنانا چاہتے ہیں ہم چاہتے ہیں کہ وہ انٹ ہو جائے یا دبل ہو جائے چار ہو جائے اس سے ہمیں فرق نہ پڑے اور پھر کسٹنز لائے کہ جی سٹیک خالی ہے یا بھرہ ہوا ہے اور سو اور سو فورت تو اگر ہم جانتے ہیں کہ جیسے سٹیٹ فورڈ ہم تیمپلیٹ کلاس ٹی اور ہم جانتے ہیں کلاس سٹیک وہ ہو گیا اب اس کے دیٹا ممبرز کو دیکھیں پہلے تو ہم سمجھ لیتے ہیں کہ جی اس کا کوئی سائز ہوگا یعنی کتنے بیچ میں ایرے کے اندر ہم ایلیمنٹ رکھ سکتے ہیں لیکن انٹ کال سائز یہ انٹ ہی ہے کیونکہ ایرے کی لمبائی ہمیشہ انٹ میں گینی جاتی ہے کہ لنگ ہو سکتا ہے شوٹ ہو سکتا ہے انٹ ہو سکتا ہے لیکن دبل فلوٹ نہیں ہوتا سو وہاں تو انٹ ہی لکھا جائے گا اس کے بعد ہمیں اس کے لیے ایک ایرے بھی دیترمین کرنی ہے لیکن ایرے جو دیٹا طائف ہے وہ ویریبل ہمیں چاہیے کہ دی اس میں ہم وہی انٹ یا فلوٹ یا چار کچھ بھی سٹور کر سکیں تو ایرے کے لیے ہم دیتا طائف وہ تی لکھیں گے جو اوپر ٹیمپلٹ ٹی لکھا تھا یہاں پہ ہم لکھتے ہیں کپیٹل ٹی کے ساتھ ٹی اور پھر ایرے کا نام let's call it ایرے اور پھر آگے سکوئر بریکٹس آجاتے ہیں جو بتاتے ہیں کہ یہ ایرے ہے this is one way of doing it the other one is to think in terms of کہ جی ہم کوئی دنائمک میمری آلوکیشن کرنا چاہتے ہیں یہاں پہ اس کمپلیکسٹی سے ہم بچتے ہیں ہم اس میں نہیں جاتے ہیں ہم کہتے ہیں جی فکسٹ سائز ایرے ہوگی اور وہ ایرے جو ہے وہ ہمیں کیوںکہ دیکلیر کرنی ہے تو آپ کو یاد ہوگا ایرے کو دیکلیر کرنے کے لیے آپ کو ایک constant value چاہیے ہوتی ہے یہ constant value is obviously ہم کلاس کی definition میں نہیں لکھتے یہ کنسٹرٹر میں جائیں گی اور جب construction call ہوجا کسی object کے لیے یعنی stack object کے لیے اس وقت ہمیں چاہیے ہوگی اس وقت ہمیں نمی بھا جو ہمیں قاعدتے ہیں to actually define the array for us کچھ ہمیں utility functions چاہییں ہیں push کا function اور push جو ہے word یہ بھی stacks کے لیے کومنلی استعمال ہوتے ہیں کہ جی stack پہ کوئی چیز پوش کر دیے ہم نے اور پھر pop کا function کہ جی stacks ہم نے کوئی value اُٹھا لی ہے پوش جو ہے کہا چیز پوش کر رہے ہیں it is of type t پوپ کیا کر رہے ہیں it is of type t so pop should return something of type t یعنی int اگر پوش کر رہے ہیں تو int return کر رہے دبل پوش کر رہے ہیں تو دبل return کر رہے ہیں and so on so push and pop آپ کو function چاہئے ہوں گے which will be parameterized with t اس کے بعد آپ کو maybe کچھ جنریک manipulation یا question ڈالے function چاہئے ہوں stack بھراؤ ہے is empty you can write a function which returns a boolean کہ if it is true the stack is empty if it is false stack میں کچھ ہے آپ کہیں کہ جی اس فل کا ایک utility function استعمال کر لیں ہم نے اوپر size جب بتا دیا ہے تو size سے زیادہ اس میں پلیٹیں یا number یا character store نہیں ہو سکتے so you might want to have an is full function which returns a true value when the stack is full and so on اس کوڈ کو اگر آپ دیکھے you will understand it is very very simple جہاں پہ ہمیں ایک جنریک ڈیٹا طایب چاہئے تھی وہاں پہ ہم تی لکھتے گئے ہیں وہی چیز کہ جہاں پہ ہم نے اس کے functions ڈیفائن کرنے ہیں ڈیکلیر نہیں ڈیکلیر تو کلاس کے اندر ہو گئے ڈیفائن کرنے کے لیے ہم نے پھر angle brackets اور ڈی استعمال کیا ہے کلاس کے نام کے فورن باد پھر scope resolution operator ڈبل colon اور پھر function کا نام اور پھر اس کے اندر جہاں جہاں جنریک ڈیٹا طایب استعمال کرنے ہیں وہاں ہم نے ڈی لکھتی ہے یہ ایک ڈیکلیر کلاس کی ڈیفائنشن بنا جاتی ہے it's there in the book so you can look it up اس کو جب ہم استعمال کرنے جاتے ہیں all we do is stack آگے angle brackets کے اندر ہم نے لکھتی ہے int اور پھر آگے اس کو value دی دی ایک initializer value بھی دی دی تاکہ وہ size ڈیٹرمین کر سکے you should read this as create a stack of type int اسی طریقے سے stack angle brackets ڈبل with x would mean x is a stack of type ڈبل the advantage جو میں بتاتا آیا ہوں کجی stack کلاس آپ نے ایک تفاہ لکھی ہے because the behavior is common regardless of the type of data you want to put on the stack so we write one stack class and then use it for ints we use it for doubles you can use it for characters you can also put characters on the stack a b c d ڈیٹے جائیں پھر اس کو اٹھاتے جائیں again if you look at the example and more importantly if you do it yourself you will also learn the stack behavior کیونکہ اس ڈیٹرمین میں ہم صرف ایک طرف سے نمبرز ایڈ کر رہے ہیں اور پھر اسی طرف سے اٹھا رہے ہیں you will notice کہ اگر آپ one two three four five stack پے ڈالیں گے جب اس کو اٹھانے لگیں گے تو آپ کو reverse order میں بلیں گے five four three two one which is last in first out جو بھی اخیر والا نمبر ہوگا وہ سب سے پہلے واپس آئے گا strong recommendation please write this class it's very interesting implement it and test it out پورا کوڑ آپ کے پاس ہے لیکن اپنے ہاتھ سے لکھیں اور اس کو پریکٹس کریں اور خاص طور پہ template استمال کریں so that you can prove to yourself کہ stack جو ہے وہ نمبرز کے لیے بھی کام کر رہے ہیں اور کرکٹرز کے لیے بھی کام کر رہے ہیں یعنی it wouldn't be fun اگر میں کہتا ہے کہ انٹ کے اور دبل کا آپ کمپیر کر سکیں انٹ اور دبل کے لیے تو یہ کام کرتی ہے لیکن جب ہم کوئی اور فنسی منیpulation نہیں کر رہے ہیں ہم دو چیزوں کو جمع نہیں کر رہے ہیں so we don't need any operator overloading it's a very simple class جس میں آپ automatically دیکھ سکتے ہیں کہ جی characters کی لیے بھی it behaves the way we expect it to behave last in first out دیتہ سٹرکٹرز کے اندر یہ بار بار بہت ساری اس اس سٹرکٹرز آئیں گے جیسے ہم نے آج stack کی بات کی there is a queue data structure there are link lists ایسیٹرہ queue ہوتی ہے آپ کو پتا ہے کتار میں کھڑے ہو جاتے ہیں تو کتار میں ہم نواملی کھڑے ہوتے ہیں human beings persons are standing in a queue queue کا correct concept وہ کیا ہے first in first out جو کتار میں پہلے آئے گا وہ پہلے سرب ہوگا پہلے نکلے گا باہر stack last in first out queue جو ہے وہ first in first out ہے again اگر سوچیں تو queue دو کسی چیز کا بھی ہو سکتا ہے it can be a integers کا queue it can be a doubles کا queue it can be a queue of persons so another use for a template class coming up آپ اپنے اردگر دیکھیں real world میں تو جب بھی آپ پروگریمن کے حوالے سے سوچتے ہیں we think in terms of defining classes for objects that are around us because normally our programs are supposed to manipulate real world objects ہم ان کو کسی طریقے سے abstract کر کے computer کے اندر لجا رہے ہیں اور پھر ان کو استعمال کرتے ہیں by now you should start thinking in terms of generic versions functions کی ہم نے بات کی تھی آج میں classes کی بات کر رہا ہوں you should think in terms of generic classes کہ جی ایک set of actions ہے جو کہ مختلف کسم کی چیزوں کے لیے similar ہے if these are similar actions you should think of one generic class جس کے اندر template class تی اوپر لکھیں تی استعمال آپ کریں اور پھر اس کے لیے instantiate کرنے کے لیے all you need to do is class name angle brackets کے اندر لکھیں کس کسم کی class وہاں پہ انٹیر دبل آئے گا یا چار آئے گا whatever اور پھر اس کے objects create ہوتے جائیں گے and the nice thing with all this process as with functions is that it is done automatically for you templates are a major code re-use feature یہ ریلیٹی بھی recently introduce ہوا تھا see plus plus کی اگر history دیکھیں اس کے اندر the templates came in very late but they are a very important feature جیسے میں نے آپ کو بتایا کہ جی اس کے میں data structures کے حوالے سے تو بہت سارے examples دے سکتا ہوں you will realize کہ when we write more and more complex code it makes a lot more sense to keep your total code base very small very concise تاکہ وہ tested code ہی یہی بات ہم نے کی تھی جب ہم classes لکھنے گئے تھے کہ جی interface اور implementation کو علیدہ علیدہ کر دیا اور پھر implementation جو ہے جو ہم نے member functions وغیرہ لکھیں اس کو Thoroughly test کر کے اس کو seal کر دیا اب seal کر کے class کو استعمال کرتے جا اس کے objects بناتے جائیں ہر object کو پتا ہے کہ اس نے behave کیسے کرنا ہے you have tested code to work with so there was a level of abstraction from detail ہمیں detail کی ضرورت نہیں رہتی template functions go even or template classes go one step even further اندے سے کہ جی ایک code بے سے اب آپ کئی مختلف کسم کے کام کر سکتے ہیں so you can instantiate objects of many different types staying within one particular framework یہ framework یا templates یہ اتنی کو important چیز بن گئی کہ a couple of researchers actually sat down and started looking at کہ جی computer science میں یا programming میں بار بار ہم ایک концept استعمال کر رہے ہوتے ہیں وہ اتنی چیزوں پہ اپلائے کر رہا ہوتا ہے کہ اس کو templatize کر دینا چاہیے for example آپ اگر ڈیرے کا концept لے لے تو ڈیرے کے اندر بار بار ہمیں کچھ نا کچھ ایسی چیزیں کرنی پڑتی ہیں کہ جی next element next element next element ڈیرے کے اخیر پہ چلے جا اخیر کے شروع پہ چلے جا اخیر پہ کچھیز add کر دو that is a little tricky but think about کہ جی ڈیرے of size 100 ہے ہم 100 and first element ڈالنا چاہتے ہیں پریکٹیکلی تو یہ require ڈ ہے ہمیں fixed ڈیرے کے ساتھ طریقہ نہیں آتا but now we know we can program it پہلی ڈیرے کو copy کر لے نئی ڈیرے allocate کرے 101 ڈیرے کی اس میں copy کر دیں پہلے ڈیرے 100 ڈیرے ایک جگے بچی اس میں نئی value ڈال دیں طریقے ہمارے پاس ہیں لیکن یہ چیزیں ایسی ہیں جو کہ روز مرہ کے استعمال کی ہیں یہ ایک ساتھ دن اور بھی بھی بہتہ ہے جس میں آپ دوسرگا ہمارے پاس ہیں اور دلیے ہمارے پاس ہمارے پاس ہیں ہمارے پاس بات ہوتا ہے یہ ہمارے پاس ہے یہ آب سی پلس پلس کی افشل ستانڈڈ کا حصہ بنا ہے اس کے ساتھ اسٹیل سٹانڈڈ ٹیمپلیٹ لیبرری اس کا استعمال اس کوس میں نہیں ہوگا لیکن آپ دیکھتے ہیں جہاں اس ساتھ تیمپلیٹ پاس اور طیب کلاسیت جو ہم نے دسکس کی ہے You will be able to understand کہ جی سٹینڈرڈ ٹیمکٹ لیبرری میں بہت سارا کام آپ کے لیے کر دیا گیا ہے Again being a library means this is a tested code base کسی نے لکھا ہے، کوڑ کو ٹیست کیا ہے اور وہاں پہ آپ کو کمپائل کر کے آپ کو دے دیا ہے اب ان ٹیمپلیٹس کو آپ استعمال کریں اور اپنے دیتا ٹیپس کے لیے وہ سارے کنسپس implement کر لیں So array دیتا ٹیپ جو ہے وہ اس میں سے استعمال کریں آپ کا کوڈ بلکل چھوٹا ہو کے رہ جاتا ہے اور چی شاہی تھا کہ یہ جس جو آپ کو کام پر ساتھ رہے ہیں اس میں کوڈ no error no bug in it سیدہ نگی چیز کامن کے ساتھ لیئے چاہہی ہے کہ جی کوڈ کی کوئی لائن نہ لکھی جاتا ہے تو اس میں کوئی bug نہیں ہوتا اس یہ ٹیپ بڑیور میں رہے ہیں ولو ٹیپس بھی بیکیلی ہے کیونکہ آپ کو کامبریو پر آتے ہیں اس میں کوڈ لائن کی ارخہیں کو تک کرتے ہیں جب آپ کوکامبری میں کامبری ویچے ملیئے ہیں یہاں بھی آجی رہی ہے، سےیار دوینامی پیدا ہی آجی سو۔ جو کوئی رہی ہے کورد بیس، جو کہ دائمرر کردی ہوئے تو بھی اپنے بیس کو اس کورد بیس لیکنے کیا از طریق کے مربوزات ہے۔ لہذا اپنی بہت سے تاہم تیرمیش کیا، اپنی مربوزات ہے۔ جاتے ہیں گےing میں ساتھ کے ساتھ میں ، جیسا ہم نے اس کراسر سے اُن لحان جاتا ہے۔ اب ہم جو آگے اجامپل کرنے جائیں گے ایک کمپریہنسی بھی اجامپل کرتے ہیں اگلے لیکچوز میں اس میں بھی آپ دیکھیں گے the objective behind it is کے جی فرح اجامپل matrix لے لے تو دو matrices کو add کرنے کے لیے ہر دفعہ کوئی complicated code نہ لکھیں ایک دفعہ لکھ دیں اس کو test کرلیں و پھر جب استعمال کرنے ہم کہیں a plus b اور کام ہو جانا چاہیے same applies to the standard template library it is a lot of code a lot of very important code which has been pre developed for you it's available as the library اس کو استعمال کرتے ہوئے آپ programs لکھیں گے تو آپ کے programs بہت چھوٹے ہوں گے and چھوٹے ہونے کے وجہ سے ان کے اندر اتنے ہی کام errors ہوں گے we will stop talking about temperate functions and temperate classes at this time we have a couple of lectures to go what I intend to do is کہ ہم ایک اجامپل پکڑتے ہیں اور ایک کلاس بناتے ہیں وہ کلاس جو میں نے idea لیا ہے وہ یہ ہی ہے کہ ہم matrix class کو حنڈل کریں گے throughout this course ہم matrices کو بار بار لاتے رہے ہیں اجامپل کے اندر اور اس کی ایک وجہ تھی most of the programming constructs جو ہیں وہ matrix class کے اندر ان کی requirement ہو جاتی ہے یعنی decisions کی بھی ہو جاتی ہے loops کی بھی ہو جاتی ہے nested loops کی بھی ہو جاتی ہے and so on so forth so what I want to do is to use one particular base جس کے ساتھ ہم ایک کمپریہنسیف اگامپل سولف کریں ایک اٹھے سولف کریں اور آپ کو میں lead through کروں کہ جی code design سے لے کے ختم ہو کہ implementation تک اس کے اندر کیا کچھ کرنا پڑتا ہے so the plan for the remaining couple of lectures is basically to do a comprehensive code building exercise and یہ بتاتا چلو یہ جو ہمارے recent دو لیکچر تھے templates کے اوپر یہ ایسے نہیں ہے کہ جی سنلی اور ختم کر دی ہے ان کو استعمال کرنا ہے تو ہم جو matrix class بنائیں گے اس کو بھی اخیر پے جاکے ہم شاید template کے اندر convert کرنا چاہیں so that is the interesting stuff coming up till next time خدا ہفرس