মডিউল পাঠ (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 নামের একটি ক্লাস সংজ্ঞায়িত করুন। একটি পাবলিক কনস্ট্রাক্টর যোগ করুন যা একটি স্ট্রিং (ব্যবহারকারী(std::স্ট্রিং নাম)) গ্রহণ করে এবং ব্যবহারকারীর নাম শুরু করতে এটি ব্যবহার করে। একটি পাবলিক গেটার যোগ করুন std::string getUsername() যা ব্যবহারকারীর নাম প্রদান করে। প্রধানত, নাম হিসাবে 'এলিস' পাস করে একটি ব্যবহারকারী অবজেক্ট তৈরি করুন এবং std::cout ব্যবহার করে এর ব্যবহারকারীর নাম প্রিন্ট করুন।
ইঙ্গিত দেখান
কনস্ট্রাক্টরের ক্লাসের মতো একই নাম রয়েছে এবং কোনো রিটার্ন টাইপ নির্দিষ্ট করে না, এমনকি `অকার্যকর`ও নয়।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
দুটি পাবলিক পূর্ণসংখ্যা সদস্য সহ পয়েন্ট নামের একটি ক্লাস সংজ্ঞায়িত করুন: x এবং y। একটি ডিফল্ট কনস্ট্রাক্টর যোগ করুন (কোন প্যারামিটার নেই) যা x এবং y থেকে 0 শুরু করে। প্রধানত, ডিফল্ট কনস্ট্রাক্টর ব্যবহার করে একটি পয়েন্ট অবজেক্ট তৈরি করুন এবং x এবং y প্রিন্ট করুন।
ইঙ্গিত দেখান
ডিফল্ট কনস্ট্রাক্টর কোন আর্গুমেন্ট নেয় না: `পয়েন্ট() { x = 0; y = 0; }`
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ