ماڈیول اسباق (2/2)
تعمیر کنندگان اور تباہ کن
کنسٹرکٹرز اور ڈسٹرکٹرز خصوصی ممبر فنکشن ہیں جو اشیاء کے لائف سائیکل کو منظم کرتے ہیں: ان کی تخلیق (ابتدائی) اور ان کی تباہی (وسائل کی صفائی)۔
کنسٹرکٹرز
ایک کنسٹرکٹر کو خود بخود کہا جاتا ہے جب کلاس کا کوئی آبجیکٹ میموری میں بنتا ہے۔
- اس کا وہی نام ہے جو کلاس کا ہے۔
- اس میں واپسی کی قسم نہیں ہے (یہاں تک کہ
voidبھی نہیں)۔ - پیرامیٹرز کے مختلف سیٹوں کو قبول کرنے کے لیے اسے اوورلوڈ کیا جا سکتا ہے۔
#include <iostream>
#include <string>
class Item {
private:
std::string name;
double price;
public:
// Parameterized constructor
Item(std::string itemName, double itemPrice) {
name = itemName;
price = itemPrice;
std::cout << "Object " << name << " created." << std::endl;
}
void display() {
std::cout << name << ": " << price << " EUR" << std::endl;
}
};
int main() {
// Implicit call to the constructor passing parameters
Item book("Libro C++", 29.99);
book.display();
return 0;
}ڈیفالٹ کنسٹرکٹر
اگر آپ کسی کنسٹرکٹر کی وضاحت نہیں کرتے ہیں، تو C++ کمپائلر بغیر پیرامیٹر کے ڈیفالٹ کنسٹرکٹر بناتا ہے۔ تاہم، اگر آپ پیرامیٹرز کے ساتھ ایک کسٹم کنسٹرکٹر لکھتے ہیں، تو مرتب کرنے والا خود بخود پہلے سے طے شدہ کو نہیں بناتا، لہذا ضرورت پڑنے پر آپ کو اسے واضح طور پر بیان کرنے کی ضرورت ہوگی:
class Point {
public:
int x;
int y;
// Explicit default constructor
Point() {
x = 0;
y = 0;
}
};تباہ کن
ایک ڈسٹرکٹر کو خود بخود کہا جاتا ہے جب آبجیکٹ دائرہ سے باہر ہو جاتا ہے یا واضح طور پر میموری سے ہٹا دیا جاتا ہے۔
- اس کا وہی نام ہے جو کلاس سے پہلے ٹلڈ
~ہے (جیسے~Item())۔ - یہ پیرامیٹرز کو قبول نہیں کرتا ہے اور اس میں واپسی کی کوئی قسم نہیں ہے۔
- اس کا استعمال وسائل کو جاری کرنے کے لیے کیا جاتا ہے (جیسے، فائلوں کو بند کرنا، متحرک طور پر مختص میموری کو آزاد کرنا)۔
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};خود ہی آزمائیں۔
پرائیویٹ ممبر std::string username کے ساتھ User نامی کلاس کی وضاحت کریں۔ ایک پبلک کنسٹرکٹر شامل کریں جو اسٹرنگ کو قبول کرتا ہے (User(std::string name)) اور اسے صارف نام شروع کرنے کے لیے استعمال کرتا ہے۔ ایک پبلک گیٹر std::string getUsername() شامل کریں جو صارف کا نام واپس کرے۔ بنیادی طور پر، 'ایلس' کو نام کے طور پر پاس کرتے ہوئے ایک صارف آبجیکٹ بنائیں، اور std::cout کا استعمال کرتے ہوئے اس کا صارف نام پرنٹ کریں۔
اشارہ دکھائیں۔
کنسٹرکٹر کا کلاس جیسا ہی نام ہے اور وہ واپسی کی کسی قسم کی وضاحت نہیں کرتا ہے، حتیٰ کہ 'باطل' بھی نہیں۔
3 کوششوں کے بعد حل دستیاب ہے۔
دو عوامی عددی ارکان کے ساتھ پوائنٹ نامی کلاس کی وضاحت کریں: x اور y۔ ایک ڈیفالٹ کنسٹرکٹر شامل کریں (کوئی پیرامیٹرز نہیں) جو x اور y کو 0 سے شروع کرے۔ بنیادی طور پر، ڈیفالٹ کنسٹرکٹر کا استعمال کرتے ہوئے ایک پوائنٹ آبجیکٹ بنائیں اور x اور y پرنٹ کریں۔
اشارہ دکھائیں۔
ڈیفالٹ کنسٹرکٹر کوئی دلیل نہیں لیتا: `پوائنٹ() { x = 0; y = 0; }`
3 کوششوں کے بعد حل دستیاب ہے۔