 اسلام علیکم اس سے لیکن آپ نے پیدایہ کی مجھے سادیت کی تعلیم ہے سادیت میں مراجہ ہے کہ ہم نے سردنی کلاسز اور آبجیکس اور کنسٹرکٹرز کی بات شروع کر دی پہلے ہم نے بتایا تھا آپ کو کہ جی کچھ ایکسائٹنگ چیزیں آنے والی ہیں لیکن یہی ہے باقی کا کورس ہم کلاسز اور آبجیکس کے بارے میں بہت ساری بات کریں گے اور آبجیکٹ آرائیانٹٹ پرگیمنگ کی طرف نہیں جائیں گے لیکن یہ آبجیکٹ آرائیانٹٹ پرگیمنگ کے بلدنگ بلکس ہیں ان کے اوپر ہمارا کافی سفر جو ہے وہ گزرے گا اس میں خاص طور پر آبجیکس کی ہندلنگ جو ہے وہ کیسے کی جاتی ہے اور پھر اپریٹر اور فنکٹشن اوبرلوڈنگ کیسے کی جاتی ہے these are quite exciting topics and I would like to spend some time on each of these topics so that they become part of your thought processes بیسک پردائم شفٹ ہو رہی ہے from functional programming or structured programming into object oriented programming so today's lecture میں ایرادہ یہ ہے کہ تھوڑا سا ریکاب کیا جائے کہ پیسٹی دفعہ جو ہم نے چیزیں انٹروڈیوز کر دیتے ہیں ان کو ذرا سا ہم پھر سے کبر کریں گے تاکہ وہ مطلب ان کی بیسکس جو ہیں آپ کو Thoroughly understand up کر سکیں so what are we going to do today we are going to revisit classes and objects we are going to look at constructors we will introduce the concept of destructors we will look at member functions and member data and things like that so let us start back again with classes and objects what I mentioned last time was that we have changed our way of thinking instead of having our programs function oriented کہ ہم نے ایک function لکھا اور اس کو کہا جاو بئی یہ تمہیں دیتا دیا ہے اس پے کام کرو اب ہم اپنی سوچ کو بدل رہے ہیں اور کہہ رہے ہیں کہ جی اب ہمارے پاس دیتا ہے جس کو پتا ہے کہ اس نے آپ کو manifest کیسے کرنا ہے so اب ہم دیتا کو کہیں گے کہ آپ نے آپ کو display کرو دیتا کو کہیں گے آپ کو manipulate کرو and so on تھوڑی سی philosophy کی بات کرتے ہیں اسی جب ہم نے بات کی کہ دیتا کو کہا کہ آپ کو display کرو what is the philosophy behind it you see programming جیس طرف کو جا رہی ہے وہ اب زیادہ سے زیادہ object oriented ہوتی جا رہی ہے what it means is کہ جی our programs are now centered around the data around the objects themselves and therefore it would be nice اگر ہمارے پاس کوئی کسم کے building blocks مل جائیں جن کو ایم ایکٹھا کر کے جلدی سے کوئی نیا functional program لکھ سکیں building blocks کو آپ وہی اپنے civil engineering یا گھر بنانے کے concept سے آپ equate کر سکتے ہیں کہ یہ ہم جیسے انٹے ہمیں مل جاتی ہیں انٹے اور cement ملتا ہے تو ہم دیوار کھڑی کر لیتے ہیں پر انٹ بزادہ خود بھی پہلے سے construct کی ہوئی ہے یعنی اس میں کسی سانچے میں آپ نے میٹی کو دھالا ہے پھر بھٹی میں دھالا ہے اس کو بیک کیا ہے اور ہمیں تب ایک building block ملتا ہے اسی طریقے سے اگر آپ objects کو دیکھیں کہ پہلے ہم simple variables کی بات کر رہے تھے integers, doubles, floats, characters پھر ان کی ہم نے strings بنانے شروع کر دی یا arrays بنانے شروع کر دی لیکن ہمارے پاس کوئی وہ پھر بھی simple variables ہی رہے اب ہم بات کر رہے ہیں کہ جی ایک block بن گیا جس کو نہ صرف یہ پتا ہے کہ اس کے اندر کیا ہے لیکن اس کو اپنا behavior بھی پتا ہے تھوڑا سو اور آگے چلتے ہیں اس concept کو آگے لے کے چلتے ہیں دیکھیں آپ بات یہ ہوئی ہے ہم نے c out استعمال کیا تھا for displaying many things ہم نے c out کے ساتھ integer بھی screen پر display کیا and so on اس وقت integer کو نہیں پتا تھا کہ اس نے آپ کو کیسے display کرنا ہے c out کو پتا تھا کہ جی integer کو کیسے screen پر display کیا جاتا ہے same applies to all the other data variables اب ہم چاہرے ہیں کہ جی کسی طریقے سے integer کو بزاتے خود پتا ہو کہ میں نے آپ کو display کیسے کرنا ہے so it is a different thought process it's a different way of looking at things integer کو اگر پتا چل جائے کہ جناب اس نے آپ کو display کیسے کرنا ہے تو ہمارا کوئی فائدہ ہوتا ہے well we have to again expand our scope of thinking and see کہ جی اور کہاں سے یہ ہمیں فائدے مل سکتے ہیں دیکھیں جب ہم پرگریمنگ کی طرف آتے ہیں تو ہم کوئی real world problem ہوتا ہے اس کو حل کرنی کی کوشش کر رہے ہوتے ہیں real world جیسے آپ کو معلوم ہے وہ صرف inch doubles floats اور charge کی نہیں بنی ہوئی اس کے اندر real world چیزیں ہوتی ہیں گارییں ہوتی ہیں سیکل ہوتے ہیں لوگ ہوتے ہیں building ہوتی ہے school ہوتا ہے college ہوتا ہے سڑکیں ہوتی ہیں they everything if you think about it they are objects if they are objects each object has a behavior associated with it اگر ایک انسان کو لیں تو وہ بات بھی کر سکتا ہے چل بھی سکتا ہے اٹھ سکتا ہے بیٹ سکتا ہے کپڑے پہنے اس کو آتے and a multitude of other things گاری کو لیں تو اس کے اپنے کچھ اور functions ہو جاتے ہیں yes attributes اپنی جگہ پہ again if you take a human being you are talking of اس کی height بھی ہوگی اس کا weight بھی ہوگا اس کے انکھوں کا رنگ بھی ہوگا اس کے بالوں کا رنگ ہوگا and so on وہ اس کے attributes ہیں اور اس کے actions جو ہیں وہ اس کے functions یا methods ہیں یعنی وہ کرتا کیا ہے same applies to vehicles same applies to aeroplanes یعنی there are some things which are attributes اس کو ہم data members کہہ رہے ہیں کدی جہاز ہے تو ہم کہیں گے اس کی انچائی لمبائی کیا ہے seatیں کتنی ہیں پئیے کتنے ہیں engine کتنے ہیں engine کی horse power کتنی ہے اور اگر action کی بات کریں گے تو اجنا وہ take off بھی کر سکتا ہے اور پھر ہوا میں اڑھ بھی سکتا ہے پھر اڑھنے کی اس کی کوئی speed بھی ہے وہ turn بھی کر سکتا ہے these are all functions اگر language کے حوالے سے سوچیں ہماری روز مرہ کی talking language تو ایک طرف nouns ہیں verbs جو ہیں وہ actions ہیں وہ ہماری new terminology کے اندر ہماری methods کہتے ہیں اور وہ ہم کہتے ہیں کہ object کے اندر کسی طریقے سے اس طرح سے شامل کیے جائیں کہ object کو خود ہی پتا ہو کہ میں نے اس function یا اس behavior کو کیسے achieve کرنا ہے again if we think in terms of data تو data کو سوچیں کس کس کس کسم کا data ہمیں manipulate کرنا پڑتا ہے کیا is it always salaries and payrolls and amounts and numbers well actually data comes in more in different varieties and in many more varieties آج کل آپ کو پتا ہے آپ اگن computer پہ کام کر رہے ہیں they are normally multi media equipped جب ہم نے multi media کی بات کی تو ہم نے کہا جی multiple media what is it that we talking about we no longer talking about لیٹرز اور نمبرز آتے ہیں صرف abc اور one to three screen پہ نہیں آتا آپ کو پتا ہے تصویریں بھی آتی ہیں images بھی آتی ہیں windows بھی آتی ہیں dialog boxes بھی آتی ہیں رنگ آتا ہے روگن آتا ہے so many things but not just that وہ تو graphics ہے that is just one type of medium so we have numbers and letters then we went on to graphics graphics آگے چلیں تو آپ کو پتا ہے کہ جی لیکٹرز ہیں یہ بھی cd پے مل جاتے ہیں اگر cd پے مل جاتے ہیں تو cd ہم نے computer میں ڈالی تو آپ کو ایک movie چلتی ہوئی نظر بھی آئے گی so you now seeing a video in motion on your computer screen it's another type of medium آپ کسی طریقے سے picture off کر دیں تو آپ کو آواز آ رہی ہے lecture کی so that is audio audio is yet another type of medium if you think in terms of data تو صرف وہ اب نمبرز اور لیٹر سے ہم بڑھکے pictures اور images کو شامل کر چکے ہیں اور pictures اور images کو شامل کر کے آگے چل کے ہم اس میں audio اور video کو بھی لیا ہے so data has now expanded in scope اگر ہم اب revisit کریں اس تیٹمنٹ کو کہ میں نے کہا تھا کہ جی integer go and display yourself اس وقت تو اس کی زیادہ سمجھ نہیں آتی تھی لیکن اب ہم نے جب data کی scope کو بڑھا دیا ہے now if we go and say audio go and play yourself which is the same in some sense کہ جی integer display yourself تو display جو ہے وہ audio کی لیے must be play something that we can hear idea is کہ جی audio کو پتا ہو کہ اس نے آپ کو play کیسے کرنا ہے rather than ایک function لیں اور اس کو کہیں تمہیں ہم کو data دیں گے which is an audio file اور اس کو تم play کرنا so we are bringing the functionality into that class or into that object same applies to video video go play yourself اور video کو پتا ہو کہ جی میں نے کیسے play ہونا ہے screen پہ کتنا بڑا نظر آنا ہے کہ speed سے چلنا ہے and so on so forth اسی philosophy کو اسی concept کو تھوڑا اور آگے لیکے چلتے ہیں ابی that topic is advanced but hopefully when we get to it in the databases course you will understand کہ وہ بھی ایک تحریق چل رہی ہے یا research چل رہی ہے کہ جی true object oriented databases بنائے جائیں now what is meant is object oriented databases at least my understanding وہ یہ ہے کہ جناب ڈیٹا بیس کے اندر ہم ڈیٹا سٹور کرتے ہیں اور پھر اس کو ڈیٹریو کرتے ہیں اور اس کے اوپر ہم کئی questions پوچھتے ہیں مطلب conventional database اگر سمجھ لیں کمپنی کا ہے وہی ہم نے سارے اس کے employees ان کا data database میں store کیا ہے تو میں یہ پوچھ سکتا ہوں اس سے question database کہ مجھے ان سارے employees کی list دے دو جن کی salary 3,000 اور 5,000 کے درمیان ان کی salary ہے ان کی list دے دو 10,000 سے زیادہ کی list دے دو and so on or give me the list of employees who have been employed by the company for more than 3 years so we ask questions and the database management system basically sorts out those questions gets the data and brings it back to us اب سوچیں کہ دیتا بیس کے اندر یہی numeric اور character ڈیٹا ہم نے store نہیں کیا ہوا ہم نے اس سے کہیں زیادہ چیزیں what happens اگر ہم نے audio file store کی ہوئی ہیں اب ابھی ہم اگر اس کو concept پرناہتا ہم کہیں گے ہم نے audio file store کر دی اور اس کے ساتھ کچھ اس کے attributes بھی store کر دیئے for example اگر ہم نے کوئی گانہ store کیا ہے تو ہم کہیں گے کہ گانے والے کا نام ہو شایر کا نام آجائے بیچ میں پھر maybe جو موسیقی جس نے بنایا اس کا نام آجائے وہ علیدہ سے attribute رکھلیں ابھی تا ہمارے پاس یہ سلاحیت نہیں ہے کہ ہم دیتا بیس کو query کر سکیں کہ جس گانے کے اندر کوئی خاص شیر آیا ہوا ہے وہ گانہ نکال کے ہمیں دو now the idea there is that we cannot dig into the audio file to find out whether a certain phrase or sentence or a verse is included in that song the same applies to a movie suppose میرے پاس documentary کیا میں آج بیٹھ کے ڈیٹا بیس سے query کر سکتا ہوں کہ جی وہ ساری documentaries نکال دو جن کے اندر قائدعازم کی تصویر نظر آتی ہو okay there is no way unless کوئی پہلے documentary کو دیکھتا اور ساتھ اس کے کوئی attributes تاپ کرتا کہ the presence of the قائدعازم yes وہ دال دے تو پھر تو ordinary ڈیٹا بیس کیا اور صرف query نا کر سکیں پھر ان کو کہیں کہ وہ تمام documentaries جس میں for example قائدعازم نظر آتے ہیں ان کو play کر دو اور ہمیں کوئی programming کرنی پڑے وہ video یا وہ documentaries دیتا بیس میں پڑی ہوں ان کو پتا ہو کہ یہ ہم نے play کیسے ہونا اور وہاں کے play ہو جائیں so یہ ایک research کا ڈیریکشن جس طرف پورےather classes کی جن سے ہم نے ڈیریکشن ہم additive علم都是 ڈیئ کا trick baba ڈیییго à ڈیے ڈیے ڈیے day ڈیے اس اک Amber ڈیان ڈیئے ڈیا ڈیے ڈیاglich سکم ڈین ڈیان ہم بات کرتے رہے ہیں لیکن صرف ڈیٹا میمبرز نہیں ہوتے اس کے علاوہ وہ functions یا وہ methods بھی ہوتے ہیں جن کے ساتھ ہم اس ڈیٹا کو manipulate کر سکتے ہیں اس کے بعد ہم نے بات کی تھی the concept of data hiding یعنی encapsulation کہ کلاس کے اندر جو ڈیٹا ہے وہ اس کو ہم بہر سے ہاتھنا لگا سکیں لیکن ایک defined دروازے کے through ایک defined set of functions یا methods کے through ہی ہم اس ڈیٹا کو manipulate کر سکیں those are the member functions اور ڈیٹا کو hide کرنے کے لیے ہم نے کہا تھا اس کو ہم private declare کر دیتے ہیں if that data is private then it is available only to member functions of that class ایک اور ڈیپنیشن بھی ہے وہ آگے چل کے آئے گی وہ ہے friend functions کی but for the moment جو ڈیٹا کا member function ہے یا جی جو method ہے اس کو تو وہ private data members سارے نظر آتی ہیں ان کو add کریں subtract کریں ان میں چیزیں لکھیں ان سے چیزیں پڑیں وہ کر سکتے ہیں لیکن کلاس سے بہر کوئی program کا حصہ جو ہے وہ private data members کو access نہیں کر سکتا so you have to have this concept clear that normally in a class we divide the private part which is normally what we call the implementation of the class from the functions that manipulate that private data which is called the interface which is the front end جو ہمیں نظر آتی ہے اور ہم بہر سے اس کو استعمال کر سکتے ہیں اس کے بعد ہم نے چل کے یہ ایک definition تا کم نے بات کی اس کے بعد بات کی تھی ایک special کسم کا function جس کو ہم کہتے ہیں constructor تو آج ذرا سا time ہم constructors کے اوپر لگائیں گے constructors جو ہے وہ ایک special function ہے جو کہ جب بھی ہم اس کلاس سے کوئی object create کرتے ہیں whenever we instantiate an object of that class وہ constructor function کال ہو جاتا ہے اگر ہم کلاس کے اندر constructor function جو ہے وہ define نہیں کرتے تو c++ جو ہے وہ اپنی طرف سے ایک default constructor مطلب present کر دیتی ہے اور وہ constructor چل جاتا ہے constructor کرتا کیا ہے constructor کا بیسک کام جو ہے اس کو understand کرنے کے لیے we have to go back and see کہ جی c++ لکتے وقت truestrap نے کن کن چیزوں کا خیال رکھا what he looked at was کہ the majority of programming problems جنکہ ہم bugs کہتے ہیں وہ اکر کرتے ہیں because of the use of uninitialized ڈیٹا ڈیٹا جو ہم نے declare کر دی ہے variables declare کر دی ہے ابھی ان میں کوئی valid value ڈالی نہیں ہے اور ان کو استعمال کرنے لگ پڑے ہی یعنی ہم نے ایک int i declare کر دیا اور کہیں پے i equal to zero یا ایکوال to five نہیں کہا اور نیچے جاکے کہ دیا جی اس ایکوال to two multiplied by i now that is using an uninitialized ڈیٹا ڈیٹا ویریبرو موچنے which is bad news syntax میں کوئی ارر نہیں ہے لیکن جب ہم logically program کو دیکھیں گے تو سر پکڑ کے بات چاہتے ہیں کہ جی ولتی ہو رہی ہے لیکن کہاں ہو رہی ہے so initialization of data is a very critical activity constructors they give us an opportunity to initialize the data members of an object in such a way کہ جب object بن کے یعنی create ہو کے instantiate ہو کے ہمارے program کو ملتا ہے تو اس کے جو ڈیٹا والا حصہ ہے وہ کسی known state میں ہوتا ہے it is in a valid state and it can be used so constructors are used to initialize the data members of an object اس کے بعد ہم نے یہ بھی بات کی تھی کہ جی class جو ہے کیونکہ وہ ایک user defined ڈیٹا تائیپ ہے تو بزاتے خود class جو ہے وہ memory میں جگے نہیں لیتی یعنی اس کی definition وگیرہ جو ہے program میں تو شامل ہے لیکن جب تک ہم class سے کوئی object create نہیں کرتے تو ہماری memory میں کوئی جگے occupy نہیں ہوتی constructors جو ہیں یہ اس جگے کو پہلے occupy کرا کے یعنی data members کی جگے بنا کے پھر data members میں وہ value ڈال دیتے ہیں جو ہم چاہتے ہیں کہ جب object create ہو اس وقت اس میں کیا value ہو یہاں پہ یہ تو constructors کا ایک function ہو گیا so initialization is a good reason for using constructors میں نے کہا تھا کہ جی اگر آپ constructor نہیں لکھتے تو c++ آپ کو ایک default constructor دے دیتا ہے now when a default constructor is called it does no initialization whatsoever اس کو نہیں پتا کہ جی میں نے وہ integer age جو تھا اس میں کوئی value ڈالنی ہے کہ نہیں یا ہم اپنے پچھلے لیکچر والی class لے کے چلتے ہیں date والی تو day میں یا month میں یا year میں کوئی values ڈالنی ہے کہ نہیں وہ اپنا default کام کر کے آجائے گا in other words the default constructor provided by the compiler does no initialization for you so you have to be very careful and very careful کا ایک بڑا simple حل ہے وہ یہ ہے کہ جی کوئی class آپ لکھیں ہی نہ جس میں آپ نے خود کوئی constructor provide نہ کیا ہو اگر آپ constructor provide کر دیں گے تو then normally when you create an object from that class that constructor will be called but there is a caveat I also mentioned last time کہ جی ایک قسم کا constructor نہیں ہے آپ کئی قسم کے constructors ڈیفائن کر سکتے ہیں ایک ہی class کے لیے یاد رہے کہ جب ہم نے constructor کی بات کی تھی تو اس کے نام کا بھی ذکر ہوا تھا کہ جی the name of the constructor یعنی function کا نام کیا ہوگا وہ وہی نام ہے جو کہ class کا نام ہوتا ہے constructor کی کوئی return ڈاپ نہیں ہوتی it does not return anything not even void which means کہ constructor function جب لکھیں گے تو اس کے اندر کوئی return statement نہیں ہو سکتی اس چیز کا خاص خیال رکھئے گا اگر آپ constructor میں return statement ڈالیں گے تو normally the compiler will catch it as a syntax error now back to the types of constructors I also mention کہ جی اگر ایک constructor آپ لکھتے ہیں جو کوئی arguments نہیں لیتا so it can do initialization but it need not take any arguments so you can write constructor date class کا date with empty parentheses جب آپ ایسا constructor لکھتے ہیں that automatically assumes the role of the default constructor if you write such a constructor any a constructor that takes no arguments then c++ will not substitute a default constructor whenever you create an object وہ آپ والا ہی constructor call ہوگا so think about it کہ جب بھی آپ class بنائیں جہاں پر میں کہا جی constructor provide کرنا is good programming practice it is also good programming practice to provide a default constructor اور constructor کا again وہ concept آپ سامنے رکھیں کہ main purpose جو ہے وہ ہے object کو اس طریقے سے initialize کیا جائے کہ it is in a known valid state so in our case for example ہم نے date class لی اور اس کا کہا کہ جی تین member اس کے data variables ہیں integer month integer day integer year they are all ints you don't have a fraction of a day اگر وہ variables ہیں تو اس کو by default اگر ہم ایک date کا object بنائیں گے تو کیا values دیں گے now as an imaginative programmer you can decide کہ جی ok میں نے اپنی birth date ہی ڈالنی ہے بیچ میں ڈالنے لیکن کیونکہ وہ date object ہے وہ کسی اور نے بھی استعمال کرنا ہے آپ کچھ اس کسم کا کریں گے کہ جی اس کو day one month one year one یا کچھ ایسی initialization دے دیں گے جو کہ ایک known state ہوگی میبھی اس کا مطلب کچھ نہ ہو nonetheless we don't have to provide only one constructor we can provide more how do we provide more i mentioned last time we use function overloading اور function overloading کا آپ کو یاد ہوگا کچھ اس کے rules ہیں rules یہ ہیں کہ جب بھی ہم function کو overload کرنا چاہتے ہیں تو function کا نام تو وہی رہتا ہے لیکن اس کی argument list بدلتی ہے اور argument list جو ہے اس کو بدلنے کے بھی دو طریقے ہیں it can either vary in the number of the arguments or it can vary in the type you cannot have two functions with the same number and type of arguments and assume کہ they will be different than they are identical that is not overloading overloading requires that the argument list be different وہی argument یا رادہ وہی جو concept ہے وہ constructors پے apply ہوتا ہے so if we supply more than one constructor for a class we can call one or the other depending on کہ جی ہم کس طریقے سے اس کو call کر رہے ہیں so جہاں پہ date کے لیے ہم نے ایک default constructor Provide کیا کہ جی اس کو کوئی چیز پاس نہیں کریں گے تو یہ month day or year کینا کوئی ایک خاص default value سیٹ کر دے گا تو وہاں پہ میں نے example کو expand کرتے ہوئے پیسٹی دفعہ بھی بات کی تھی کہ جی ہم اس کو تین integers بھی پاس کر سکتے ہیں so let's write another constructor which takes int month int day and int year as the arguments and then goes in and puts these values into the data members of the object that is being created now question is when does it happen what happens is کہ جب آپ ایک object کو instantiate کرتے ہیں آپ اپنے program میں declare کرتے ہیں date my date جب یہ line execute ہوتی ہے program جب ہم چلاتے ہیں تو سب سے پہلے my date کے لیے کچھ جگے memory میں reserve ہو جاتی ہے وہ جگے کیسے reserve ہوتی ہے اس کی بھی بات کرتے ہیں جب جگے reserve ہو گئی تو اس کے اندر month day or year کے لیے تین integer variables کی بھی جگے آگئی اس کے بعد control جو ہے وہ constructor کی اندر چلا جاتا ہے کہ جگے بنگی ہے constructor کیا کرنا چاہتے ہیں constructor than if this is a parameterized constructor اور اس کو ہم نے کچھ values پاس کی ہیں تو اب جاکی یہ month day or year میں وہ values assign کر دے گا اور پھر بہر آجائے گا remember no return statement no return type for the constructor can the constructor right values in these data members data members were private answer is yes it can because the constructor is a member of the class if it is a member of the class تو اس کو کلاس کی ہر چیز نظر آتی ہے آپ اس طرح سے سمجھلے تصور کر لیں کہ جی ایک کمرہ ہے اس کے درمیان میں ایک پتلاسہ پردھاٹا گا ہوا ہے پردھے کے پیچھے جو چیزیں ہیں وہ کمرے کے اندر جو مقیم لوگ ہیں ان کو تو نظر آتی ہیں ان کو پتا ہے کہ کمرے کے اندر کیا کیا چیز ہے لیکن سامنے جو دروازہ جب کھلتا ہے تو بہر سے لوگوں کو جو چیز نظر آتی ہے وہ یہ ہے جو پردھے سے آگے چیزیں بیٹی ہوتی سو پردھے سے آگے is the public interface of the class پردھے کے پیچھے is the private interface if the person inside the class یعنی the function is a member function the member function کے لیے سارے کمرے میں جتنی چیزیں ہیں وہ جو پردھے کے پیچھے ہوگا کے پردھے کے آگے آنسر ایجازت ہے لیکن if you are not a member and you're an outsider then you can only touch see manipulate or call the public interface والے methods you cannot look behind the screen so keep that concept in mind اب میں نے کہا کہ جی کنسٹر جو ہے وہ تو ڈیٹا ممبرز کو مینے پلیٹ کر لیتا ہے تو کنسٹر خود جو ہے اس کو سوچیں کہ وہ پردھے کے پیچھے ہوگا کے پردھے کے آگے آنسر is fairly obvious a constructor has to be in the public section of the class it has to be a public interface جو کہ بہر سے call ہو سکے وہ اس پاس دے کہ جب بھی ہم نے object create کرنا ہے تو object ہمارا program create کر رہا ہے so program should be able to call the constructor keep that in mind constructors are always placed in the public interface of the class اس کے بعد ہم نے بات کی تھی default arguments کی پہلے ہم نے introduce کیا تھا کہ جی see plus plus کے اندر ہم functions کو default arguments دے سکتے ہیں since the constructor is just another function it can also take default arguments اس چیز کا خیال آپ کو رکھنا چاہئے کہ اگر کوئی آپ constructor provide کرتے ہیں جس کے سارے arguments کو default values دی ہوئی ہیں so in our case ڈیٹ کا اگر لیلیں اگر میں کہو کہ int month equal to one comma int day equal to one comma int year equal to one یہ argument list ہے parametrized constructor کی تو میں نے تینوں دیتہ members کیلئے default value دے رکھی ہے اگر یہ default value دے دی اور میں program میں جاکے کہو دیت my date یعنی create an object of type date کنسا constructor call ہوگا میں نے date کی آگے کچھ نہیں لکھا میں نے کوئی values پاس نہیں کی میں نے کہا my date is an object of type date what will happen is think about it کی جی اب default constructor without any arguments call ہونا چاہئے یا وہ constructor call ہونا چاہئے جو parametrized تو ہے لیکن ہر parameter کی لیے آپ نے ایک default value دے رکھی ہے confusing isn't it because of that confusion if you provide a constructor which has default values for all arguments then that becomes the default constructor for the class that means اب یہ دو constructor نہیں ہو سکتے وہ ایک ہی جیسے گنے جائیں گے so you better not write date with empty parentheses اگر آپ نے ایسا fully qualified constructor دے دیا لیکن overloading کی طرف چلتے ہیں ہم نے کہا کہ جی اگر date کو میں character string پاس کروں اور چاہوں کہ جی ہمارا date object پھر بھی properly initialize ہو جائیں تو کیا ایسا constructor لکھا جا سکتا ہے well by now you know that there are many string manipulation functions that you have available string.h class کی اندر c++ میں of course ہم string class بھی لے کے آئیں گے اس کی زیادہ power ہے لیکن for the moment think about it that we can now pass a character string جس میں انگریزی کی طرح ہم date لکھے بھیج دیں ہم لکھ دیتے ہیں zero one ڈش جین جی این ڈش two thousand اور وہ کنسٹر اندر جا کے اس ڈن کے تکڑے تکڑے کر کے اپروپریٹ نمبرز لے کے وہ انٹ منت اور انٹ day اور انٹ year کے اندر شامل کر دے گا object ہمارا initialize ہو جائے گا so just expanding this concept you realize کہ constructors can come in a big variety now کتنی variety دینی چاہیے وہ بھی آپ پہ ڈپنٹ کرتا ہے as a programmer you have to stay within limits you can't think in terms of کی جی میری کلاس دیت ہے تو کوئی امریکہ والا جو منت پہلے دے گا پھر دے دے گا پھر year دے گا یورپ والا جو ہے پہلے دے دے گا پھر منت دے گا پھر year دے گا اور اگر ہم نے pure collating sequence لینا ہے collating sequence کا آپ کو idea ہونا چاہیے کی جی اگر نمبرز کو order کیا جائے تو order کرنے کے لیے think about it ڈیٹ کو اگر order کرنا ہو کیسے کریں گے جنی ہمار پاس ایک list ہے جس میں 10,000 dates ہیں میں کہتا ہوں اس کو arrange کر دو sort کر دو تو کیسے sort کیا جاتا ہے ڈیٹ کو ڈیٹ کو sort کرنے کے لیے سب سے پہلے ہم سال کو دیکھتے ہیں پھر مہینے کو دیکھتے ہیں اور پھر دن کو دیکھتے ہیں now the whole picture is turned around we've got year month day now one can think of providing constructors for every possibility that comes along but then we would spend our lives just writing constructors for every class will be writing 20 constructors don't do that but stay within reason ڈیٹ کو ڈیٹ کو ڈیٹ کو ڈیٹ کریں جو آپ کے خیال میں common usage of the class کے اندر کام آئیں گے اور اگر کسی اور نے کچھ اور طریقہ استعمال کرنا ہے sorry we've given you two or three useful constructors now you arrange your data accordingly and use them to create objects so many different issues when we come to constructors ایک بڑا کرتیکل اسو ہے لیکن وہ یا آج کے لیکچر میں لیٹھ یا probably آگلے لیکچر میں ہم کبر کریں گے which is memory allocation inside a constructor for the moment ہم simple constructors کی بات کر رہے اب دوسرا اسیو جو آتا ہے کلاسز اور اوپجیکس کے ساتھ وہ اسیو آتا ہے کہ جناب ایک طرف تو ان کا ڈیٹا پڑا ہوئے ایک طرف فنکشنز پڑے ہوئے اور فنکشنز کو methods کو ہم عام طور پہ public interface میں لکھتے ہیں تو کیا کوئی ایسے فنکشن ہوسکتے ہیں کہ جو private ہوں آنسر is yes لیکن اس کے لیے تھوڑا سا میں سوچنا پڑتا ہے. فنکشنز جو ہیں وہ دو کتیگریز کے ہوسکتے ہیں کلاس کے لیے ایک تو ہیں وہ ممبر فنکشنز جو کہ یا ڈیٹا کو manipulate کرتے ہیں یا ڈیٹا کو extract کر کے ہمیں display کرتے ہیں. میں نے پیسی دفعہ بھی شہت ذکر کیا تھا کہ یہ کچھ ڈیٹا کو ہم set کر لیتے ہیں. set the value of the ڈیٹا اور we can get the value of the ڈیٹا. so normally it is again not a style it's a programming practice کے جی ایسے فنکشنز کے آگے set لگایا جائے یا get لگایا جائے پھر ان کا نام construct کیا جائے یہ تو ہوگئے وہ فنکشنز جو کہ public interface میں ہمیں چاہیں اور ان کے مدد سے ہم ڈیٹا manipulate کرتے ہیں جو object کے اندر ہے. لیکن کئی دفعہ ایسے فنکشنز ہمیں چاہیے ہوتے ہیں جو کہ ان فنکشنز کی ضرورت ہیں. in other words think about it this way. suppose میں ایک set date ڈیٹ فنکشن لکھتا ہوں اور set date جو ہے اس کو کوئی argument دیا جاتا ہے اور وہ وہی کام کرتا ہے جو ہمارا بھی construct کر رہا تھا in other words وہ date کی کوئی value ڈیٹ کر دیتا ہے. now that function could either be public میں بہر سے بھی set date call کر لوں یا میں چاہوں گا کہ جی میرے 3-4 جو functions ہیں public interface میں بیٹھے بے وہ اس set date کو call کریں اور بہر سے یہ call نہ ہو سکے. in that case اس قسم کے functions کو ہم پر دے کے پیچھے دال دیتے ہیں یعنی class کے private section میں دال دیتے ہیں. اسے functions کو usually ہم utility functions کہتے ہیں. they are a utility which is used by other methods of the class. they are not functions that are supposed to be accessed from outside the class. so they are kept private but they are available to all member functions of the class and to friend functions. friend functions we will cover later. what else can we do with constructors and classes. ایک ساتھ اس کے اور function آ جاتا ہے. class constructor کی تو میں نے بات کر دی کہ جی وہ function ہے اس کا نام وہی ہے جو کہ class کا نام ہے اس کی return type کوئی نہیں ہے لہذا اس کے اندر return statement کوئی نہیں ہوگی. constructors جو ہیں وہ overload کیا جا سکتے ہیں جتنے مختلف constructors آپ کو چاہیے ہیں for that class آپ لکھ سکتے ہیں and at runtime the compiler will call the correct version of the constructor جو بھی چاہیے کسی object کو create کرنے کے لیے اب ذرا چلیں destructors کی طرف. destructor جو ہے اس کا پہلے تو نام کیا ہوتا ہے. it is the tilde sign. keyboard کے اوپر top left پہ آپ کو نظر آئے گا it's a little wavy line اس کو tilde کہتے ہیں. tilde sign اور اس کے بعد class کا نام no space in between so it's one word tilde class name. destructor جو ہے وہ overload نہیں ہو سکتا. because there is only one destructor for a class. what is a destructor بھی جہاں پہ میں نے بات کی کہ constructors جو ہے وہ اس وقت call ہوتا ہے جب object ہم create کرتے ہیں. so obviously a destructor is called when an object is destroyed. when does an object get destroyed. لیکن اگر ایک function میں ہم گئے اور وہاں پہ ہم نے ایک object create کیا تو وہ function کیلئے ایک local object ہے. اس کے بعد جب function نے اپنہ کام ختم کیا اور function exit کیا تو وہ object کی زندگی بھی ختم ہو گئے. that is when the object is destroyed and that is when the destructor will be called. what happens if you've declared an object in our main program. so not in a function but in the main program. so main program میں بھی جب object ہم نے declare کیا constructor call ہو گیا appropriate والا اور object create ہو گیا. our main program نے اپنی processing شروع کر دی اس نے 10,000 function کو call کیا لیکن کبھی نہ کبھی hopefully ہمارا main program بھی ختم ہو گا. جب وہ ختم ہو گا اس وقت main program کے اندر کے جو object ہیں وہ بھی ختم ہو جائیں گے. so again the destructor will be called. the question is why do we need to provide a destructor. destructor جو ہے that is normally used for memory manipulation purposes. suppose کریں کہ ہمارا constructor ایسا ہے یا ہماری کلاس ایسی ہے جہاں پہ جب object create ہوا تھا اس نے کوئی simple دیتا نہیں بلکہ کوئی خاص memory allocation کی تھی. آپ نے malloc وگیرا کا ذکر سنا تھا دو تین لیکچر پہلے ہم memory allocate کر سکتے ہیں at runtime. suppose the creation of an object allocates some memory. اگر allocate کی ہے تو پھر memory کو واپس بھی آپ نے وہ freestore ہم اس وقت heap کہتے تھے اس کو بہت ڈھیر کہتے تھے c++ میں اور objects میں ہم اس کو freestore بھی کہتے ہیں وہ memory جو allocate ہی ہے freestore سے اس کو واپس freestore میں بھی دالنا ہے. so destructors are used normally for this purpose to make sure that any allocated memory is deallocated and returned to freestore. that's not the only case you have other uses for constructors. nonetheless a few rules. number one destructors cannot be overloaded. number two destructors take no arguments. ان کو کوئی چیز پاس نہیں کی جا سکتی. and they don't return a value. so again they don't have a return type and therefore they don't have a return statement inside the destructor. چیلے اب اپنی date class بھی ہے اس کو تھوڑا سا expand کرتے ہیں. let us take a look at what else we can put in it. we have put in a constructor. اور constructor کے ساتھ ہم نے ایک parametrized constructor بھی دے دی ہے اس کو default arguments نہیں دیے تاکہ ایک without parameters ہو یعنی وہ default constructor بنے اور ایک اور جس کو ہم تینوں month day اور year کی values پاس کر سکیں اور ہم نے ایک destructor بھی Provide کیا ہے لیکن وہ simple اس وقت جو ہے وہ ہماری کچھ programming کے لیے ابھی میں اس کا ذکر کرتا ہوں اور پھر ہم نے کچھ اس کے helper functions لکھے ہیں جو کہ methods ہیں month کو سیٹ کرنے کے لیے یا day کو سیٹ کرنے کے لیے یا year کو سیٹ کرنے کے لیے اور ان کا نام ہم نے set day set month set year یہی رکھا ہے each one of them takes only one parameter a single integer اس کے بعد ہم نے get functions بھی لکھ دیے ہیں so get day get month get year بھی جو ہیں they return a simple integer one returns one sets اور ایک function میں نے ڈال دیا ہے set date کا جو کہ تینوں parameters لیتا ہو اور اس کو set کر دے set functions کی اندر normally جو ہم کام کر رہے ہوتے ہیں it is not simply an assignment of a value to a data member وہ کرنا ہوتا تو ہم data member کو public بنادیتے اور بہر سے set کر لیتے the idea is کہ whenever we put data into an object تو اس کو تھوڑا صاف ڈر لیں i mean make sure that valid values go in there same applies to a constructor same applies to all of these set functions including set date what we do is we make sure کہ جی valid values جو ہیں وہ جا کے data members کے اندر store ہوں تو اگر آپ for example call کر لیتے کہ جی date my date اور پھر اس کو تین values آپ دے دیں day کے لیے آپ دے دیں 35 month کے لیے آپ دے دیں 13 year کے لیے آپ دے دیں 2000 تو constructor کو کیا کرنا چاہیے now there's no one answer you have to decide what the answer is but certainly ایک آنسر نہیں ہے وہ یہ کہ جی day کی value کو 35 set کر دیں month کی value کو 13 set کر دیں or year کی value کو 2000 you do not want to set the day and the month in this example to invalid values ہمیں پتا ہے کہ جی مہینہ جو ہے وہ day one سے شروع ہوتا ہے number of days in a month varies gregarian calendar ہے کہیں ایک 31 ہے کہیں 30 ہے February میں کبھی 28 دن ہوتے ہیں کبھی 39 دن ہوتے ہیں year کی value کچھ بھی ہو سکتی ہے سو ہم چاہیں گے کہ کم از کم day or month کی values کو validate کیا جائے ساف کیا جائے دھولی آ جائے make sure they are proper before assigning them to the data data members یہی کام ہم constructor میں بھی کرتے ہیں یہی کام in this particular case ہم set date function میں بھی کریں گے تو سوچنے کی بات ہے کہ اگر ہم نے یہی کام کرنا ہے تو constructor کے ہم علیادہ code لکھیں if day is less than one then day is equal to one if day is greater than whatever the number of days in that month than it is equal to the number of days in the month یا اگر ہم نے 35 کیا دی ہے day کی value اور مہینہ جنوری ہے تو اس کو 35 نہ سیٹ کر رہا اس کو 31 پہ سیٹ کر دو because January کا maximum day number is 31 یا ہم اس کو پھر one کر دیں گے that is our decision but we have to bring it within a valid range but what i was talking about was کہ constructor میں یہ سارے if statements اور checks لگا کے ہم دیتا کو ساف کر کے دیتا members میں دال دیتے ہیں ساتھ ہم نے ایک function بھی Provide کیا ہے set date کا اور اگر ہم نے وہ function لکھ دیا ہے public section میں تو بہر سے بھی ہم لکھ سکتے ہیں my date ڈاٹ سیٹ دیٹ اور پھر آگے تین انٹیجوز دے دیں again representing day month and year سیٹ دیٹ must follow essentially the same logic and the same tests and the same دیتہ cleaning that the constructor did should we write the same code again as a member as a good programming practice the idea is کہ اگر ہم نے ایک ہی کسم کا کوڈ لکھنے ہیں جو ایک ہی کام کرتا ہے تو پھر اس کو ایک مرتبہ لکھا جائے یہاں پے آپ یہ پوچھ سکتے ہیں کہ جی وہ ایک مرتبہ constructor میں لکھنے چاہئے کہ سیٹ دیٹ function میں لکھنا چاہئے the answer is you should write it in the set date function and let the constructor call this function کی وجہ یہ ہے کہ جی سیٹ دیٹ جو وہ تو constructor کو کوڈ کرنے سے رہا but a constructor can call any member function in fact it can call any function which is outside the class also because they are also visible in this case we will put all of our error checking into the set date function and let the constructor call the set date with the same arguments that were passed to it when we tried to create an object arguments pass کسے کیا جاتے ہیں again very simple اگر ہمار پاس constructor ہے اسی دیٹ کا اور وہ تین integer arguments لیتا ہے تو program کی اندر ہم لکھتے ہیں date پھر لکھتے ہیں my date یا جو بھی ہم نے نام دینا ہے اس object کو اور اس کے بعد parentheses کی اندر ہم تین integers دے دیتے ہیں exactly like an ordinary function call what happens is یہ arguments جو ہے یہ constructor کو پاس ہو جاتے ہیں اور constructor ان کے ساتھ جو مرزی کرنا چاہے in this case وہ set date function کو call کر دے اور ان کی value set date کو بھیج دے وہ اندر جاکے دیتا ممبر کو سٹ کر دیں گے and we come back with the nice well initialized my date object it's an object remember an object i'll repeat is an instance of the class when we say it's an instance that means کیجی اب وہ exist کرتا ہے اور memory میں جگہ لیتا ہے so memory میں کتنی جگہ لیتا ہے what happens when we create an object دیکھیں جب ہم class define کرتے ہیں تو اب تک آپ کو یہ آئیڈیا ہو گیا کہ class میں دیتا بھی ہے اور methods بھی ہیں تو کیا وہ methods ہر object کے لیے reproduce ہوتے ہیں دیتا تو لازمی بات ہے کہ ہر object کا اپنا اپنا ہونا چاہیے کیونکہ ہر object you have distinct ہے i say date date 1 date 2 date 3 and so on the date 1 ایک اور object ہے date 2 ایک اور object ہے date 3 ایک تیسرہ object ہے اور ہر ایک کی date value you have a different ہے so they are distinct therefore they must have distinct memory locations what about the functions inside that class what about the set date function the set month function and so on وہ تو methods ہیں تو اگر آپ memory کی تصوید دیکھیں تو جب بھی classے ہم ایک object بناتے ہیں تو ایک جگہ پے functions جو ہیں وہ memory میں چلے جاتے ہیں they stay in memory but only one copy of these functions stays in memory the data part of the class that gets individual locations in memory so اگر ہم نے 3 date کے objects کیے تو چلتے باک جب ہمارا program چل رہا ہوگا تو memory کے اندر functions کی ایک copy ہوگی اور دیتا کی تین مختلف جگہ پے space allocated ہوگی اور اس میں values different ہوگی so how does the program figure out کے دیت 1 کے لیے function جو call کرنا ہے وہ دیت 1 کے ہی دیتا کو چینج کرے دیت 2 کے دیتا کو چینج نہ کرے remember کے اندر تو class کے اندر سب variables کے نام ایکی ہیں date 1 کے اندر بھی day ہے month ہے year ہے دیت 2 کے اندر بھی day ہے month ہے year ہے and date 3 has the same structure so if I call the set month function and I say month کی value 3 کر دو اب میں کس طرح سے call کروں تاکہ date 1 کی month کی value جو ہے وہ 3 ہو جائے date 2 or date 3 کو کچھ نہ ہو well it's quite simple actually what you do is you do the dot operator use the name of the object and the method that you want to call so in this case we will call date 1 dot set month parentheses 3 ہو کیا رہا ہے کہ وہ جو ایک common copy functions کی memory میں پڑی ہوئی ہے compiled ان میں سے set month function call ہوگا لیکن ساتھ date 1 اس کو call کر رہا ہے so date 1 is an object so when it calls a member function اس object کے جو ڈیٹا ممبرس ہیں وہ اس function کو نظر آتے ہیں so جب بھی ہم month کی value 3 کریں گے تو date 1 کے month کی value 3 ہو جائے گی date 2 or date 3 تو کہیں اور بیٹھے ہوئے اسی طریقے سے اگر میں کہوں گا day 2 dot set day 23 تو day 2 والا جو object ہے وہ set day function کو نظر آئے گا اور جب وہ اپنے function کے اندر لکھے گا کہ جی day is equal to 23 تو کانسا day ہے یہ وہ ڈیٹا ممبر ہے جو ڈیٹ 2 کے حصے میں آیا not the day day ڈیٹا ممبر جو کہ date 1 میں تھا یا date 3 میں تھا so it is actually quite easy to resolve جو object function کو call کرتا ہے اس object کا data function کو نظر آتا ہے so we have not wasted any memory by making a separate copy of the functions for every object that we create all objects of one class share the common functions on the other hand every object has its own data space it's exactly like saying ڈ ای جےکے ڈیٹا کے لیے 3 memory locations allocate ہوتی ہیں جن کے اندر integer place ہوتے ہیں ہم نے کہا date date 1 date 2 date 3 ان کے لیے 3 مختلف memory جگہ وہ allocate ہوں گی جن میں ان کا اپنا اپنا ڈیٹا month day year month day year month day year وہ locate ہو گا so it's a quite clear separation of data with the methods overloaded constructors overloaded functions وہ کہا جاتے ہیں وہ بھی اسی single copy میں جاتے ہیں and as needed they are called we already have spoken about کے جی overloaded functions call کیسے ہوتے ہیں the which function is to be called is resolved by the parameter list type and number of the arguments pass to that function so it is automatic کے کونسا والا overloaded function call ہوگا لیکن اس کو data کونسا نظر آئے گا جو object call کر رہا ہے اس object کا data نظر آئے گا so we should be clear about this what about destructors destructors I already mentioned till the class name that is the name of the destructor takes no arguments returns nothing is automatically called when the object goes out of scope in other words when the object ceases to exist for the moment جی جو ہماری date class ہے اس کے اندر destructor کا کو خاص کام نہیں ہے so we destructor function لکھتے ہیں اور سیمپل سا function لکھتے ہیں اس میں ایک print statement ڈال دیتے ہیں see out object destroyed تاکہ ہمیں پتا چاہے جا ہے we can confirm to ourselves کے جی object actually destroy بھی ہوا ہے اسی طریقے سے آپ اپنے constructors کے اندر جو ہے وہ بھی function میں ایک line ڈال دیں کے جی date object created تاکہ آپ کو پتا چاہے جا ہے constructor call کب ہوتا ہے اب آپ ایک چھوٹا سا wrapper program لکھیں main program لکھیں class کے ساتھ class کی definition اب آپ کے پاس ہے you'll have to type it in and then create some objects and then exit the function and see is print out جو screen کے اوپر آئے گا وہ آپ کو بتائے گا کے جی object created object created object created object destroyed object destroyed object destroyed you will be able to confirm to yourself کے جی constructor بھی call ہورا ہے اور destructor بھی call ہورا ہے کون سا constructor دیکھیں destructor تو overload نہیں ہوگا کون سا constructor اس کے لیے بھی آپ کچھ بیچ میں line ڈال سکتے ہیں ہم کہتے ہیں کہ یہ ایک default constructor دیا ہے اس میں کوئی arguments نہیں ہے تو اس میں see out میں لکھنے default constructor without arguments called پھر جو constructor ہے جس کو ہم نے کچھ parameters pass کیے ہیں اس والے constructor جو function لکھا اس میں see out کے ساتھ آپ لکھنے a constructor with parameters so اب if you create objects پہلہ object create کریں اس کو کچھ values pass کرنے creation time کے وقت تو parameterized constructor call ہوگا ایک اور date object create کریں جس کو کچھ pass نہ کریں تو default constructor pass ہوگا again آپ کا screen print out جو آپ کو sequence بھی دکھائے گا کون سا constructor call ہوا ہے کب ہوا ہے اور پھر کون سا destructor call ہوا ہے کب ہوا ہے اور بھی ہم کر سکتے ہیں آپ تھوڑی سے اپنے لیے اور experimentation کریں آپ اسی مین کے اندر سے ایک function call کر لیں اپنا کوئی لکھاوا تیک ہے نا test date function test date function کے اندر جاکے بھی آپ objects create کریں simple date objects کوئی اور value نام دے کے اس میں create کریں اب program چلائیں مین میں بھی date create کریں objects اور اپنے test function کے اندر بھی date objects create کریں you will not اس مین کے objects پہلے create ہوں گے ان کی constructor کی output آ رہی ہوگی sub routine یا function میں جب آپ جائیں تو پہلے ایک statement ڈال دیں inside function تاکہ آپ کو نظر آ جائے کہ جی program کا flow اب کنہ چلا گیا وہاں پھر آپ کو constructors نظر آئیں گے وہ constructors ان objects ہوں گے جو کہ function کے اندر create ہو رہے ہیں جب وہ function exit کرے گا since those date objects were local to the function they will be destroyed so now you will see the destructors being called and you will be able to see کہ within the function objects are now being destroyed مین میں باپس آئیں یا last line function کیا آپ اس طرح سے لکھیں exiting function so you know function یہاں ختم ہو گئے واپس مین پی آئیں مین سے آپ جب exit کریں گے تو جو مین میں objects create کیا تھے اب وہاں destroy ہوں گے so you will again be able to see that list if you look at the book you will notice some nice interesting examples which is about calling of constructors and destructors and I suggest and strongly recommend کہ آپ ان کو carefully پر لیں اور ان کو study کر لیں اور اپنے طور پہ بھی اس چیز کو practice کریں so that you are very clear کہ constructor کب call ہوتا ہے اور destructor کب call ہوتا ہے what we will do is we will now start moving on to memory allocation within classes and see there are some new mechanisms and some new functions that are available to us within c++ اور اس کے ساتھ جب ہم objects کو create کریں گے تو پھر destructor کا بھی کام نظر آنے لگھ پڑے گا کہ اس کی کو usefull نس ہے کچھ اور چیزیں جو ہیں وہ ویسے منشن کرتا جالوں لیکن they should be obvious کہ جو ڈیٹا ممبرز ہیں کلاس کے are they restricted to simple ڈیٹا تائپس کینی we can only give them انٹ ڈبل فلوٹ چار something like that or can we do something else we will talk about it next time اس پکتا ہے اجاز دیجے خدا حافظ