মডিউল পাঠ (1/2)
C++ এ উত্তরাধিকার
উত্তরাধিকার অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর অন্যতম প্রধান স্তম্ভ। এটি একটি নতুন শ্রেণী (যাকে প্রাপ্ত বা চাইল্ড ক্লাস বলা হয়) একটি বিদ্যমান শ্রেণী (বেস বা অভিভাবক শ্রেণী বলা হয়) থেকে সদস্যদের (গুণাবলী এবং পদ্ধতি) উত্তরাধিকারী হতে দেয়, কোড পুনঃব্যবহারের প্রচার করে।
মৌলিক সিনট্যাক্স
C++-এ, প্রাপ্ত বর্গ নামের পরে : অপারেটর ব্যবহার করে উত্তরাধিকার নির্দিষ্ট করা হয়, তারপরে একটি অ্যাক্সেস স্পেসিফায়ার (সাধারণত public) এবং বেস ক্লাস নাম।
class Shape {
public:
void setColor(std::string c) {
color = c;
}
protected:
std::string color; // Accessible by derived classes
};
// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
double getArea() {
return width * height;
}
private:
double width {0.0};
double height {0.0};
};অ্যাক্সেস স্পেসিফায়ার: protected
public এবং private এর সাথে, উত্তরাধিকার protected স্পেসিফায়ার প্রবর্তন করে:
privateবেস ক্লাসের সদস্যরা প্রাপ্ত ক্লাস থেকে সরাসরি অ্যাক্সেসযোগ্য নয়।protectedবেস ক্লাসের সদস্যরা বাইরে থেকে অ্যাক্সেসযোগ্য নয়, কিন্তু প্রাপ্ত ক্লাসের ভিতরে সরাসরি অ্যাক্সেসযোগ্য।
বেস ক্লাস ইনিশিয়ালাইজেশন
কনস্ট্রাক্টর স্বয়ংক্রিয়ভাবে উত্তরাধিকারসূত্রে প্রাপ্ত হয় না। একটি প্রাপ্ত ক্লাস ইনস্ট্যান্টিয়েট করার সময়, বেস ক্লাস কনস্ট্রাক্টরকে প্রথমে বলা হয়। যদি বেস ক্লাসের আর্গুমেন্টের প্রয়োজন হয়, তাহলে আমাদের অবশ্যই ডেরিভড কনস্ট্রাক্টরের মেম্বার ইনিশিয়ালাইজার লিস্ট-এ এটিকে স্পষ্টভাবে আহ্বান করতে হবে।
class Parent {
public:
Parent(int x) {
std::cout << "Parent: " << x << std::endl;
}
};
class Child : public Parent {
public:
// Explicit call to Parent constructor
Child(int x, int y) : Parent(x) {
std::cout << "Child: " << y << std::endl;
}
};নিজে চেষ্টা করে দেখুন
একটি কুকুর শ্রেণী তৈরি করুন যা সর্বজনীনভাবে পশু শ্রেণীর থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয়। ডগ ক্লাসে অবশ্যই একটি পাবলিক প্লে() পদ্ধতি অন্তর্ভুক্ত করতে হবে যা std::cout ব্যবহার করে 'Playing' প্রিন্ট করে।
ইঙ্গিত দেখান
বেস ক্লাস প্রসারিত করতে `:` সিনট্যাক্স অনুসরণ করে `পাবলিক অ্যানিমাল` ব্যবহার করুন, তারপর `play()` পদ্ধতি লিখুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
যানবাহন থেকে উত্তরাধিকারসূত্রে কার ক্লাসটি সম্পূর্ণ করুন। গাড়ির জন্য একটি কনস্ট্রাক্টর লিখুন যা std::string b গ্রহণ করে এবং সদস্য ইনিশিয়ালাইজার তালিকার মাধ্যমে যানবাহন কনস্ট্রাক্টরের কাছে পাঠায়।
ইঙ্গিত দেখান
'কার' কনস্ট্রাক্টরে, বেস ক্লাসে ব্র্যান্ডের প্রারম্ভিকতা অর্পণ করতে পরামিতি বন্ধনীর পরপরই সিনট্যাক্স `: যানবাহন(b)` ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ