টপিকঃ C++

সি++ শিখা শুরু করতেছি।ওইদিন এক বড় ভাই কিছু ধারনা দিয়েছিল কিন্তু পরীক্ষার চাপে মনে হচ্ছে সব ভূলে গেছি।কেউ যদি পলিমরফিযম,ইনক্যাপ্সুলেসন,ইনহ্যারিটেন্স নিয়েএকটু ধারনা দিতেন তাহলে বিশাল উপকার হত।এই ব্যাপারে জানেয়ালা ফোরামিকদের সাহায্য কামনা করছি।

আমি যাবো সেই পাহাড়ে, যে পাহাড়ে আদৌ কোন মানব সন্তান যেতে পারেনি...

সর্বশেষ সম্পাদনা করেছেন forhan (২৯-০৫-২০১৩ ০৮:৩১)

Re: C++

নির্দিষ্ট বই ফলো করলে বেশি উপকার পাবেন। বইয়ে অনেক কিছু লেখা থাকে যেগুলা পড়লে কনসেপ্ট ক্লিয়ার হয়ে যায়। মোটামুটি ধারণার জন্য একটু উদাহরণ দিইঃ

Polymorphism:
একই অবজেক্ট বা অপারেটর পরিস্থিতি ভেদে ভিন্ন আচরণ করবে। যেমনঃ

1 + 2    /* + অপারেটর এখানে যোগ করার জন্য ব্যবহার হচ্ছে */
“Hello” + “World”    /* + অপারেটর এখানে স্ট্রিং কনক্যাটিনেশনের জন্য ব্যবহার হচ্ছে */

Encapsulation:
এটি ডাটার সাথে ডাটা একসেস বা পরিবর্তন করতে পারে এমন ফাংশন কে সম্পর্কযুক্ত করে। যেমন আমাদের হয়তো একটা ক্লাস আছে Student:

class Student
{
        string id;
        string name;
        ….. ইত্যাদি 
};

এখন কেউ যদি Student ক্লাসের একটা অবজেক্ট এর name বের করতে চায়, কীভাবে করবে?

Student s;    /* s হচ্ছে Student এর অবজেক্ট */
string n = s.name;

Encapsulation বলছে এভাবে ডাটা এক্সেস করা বিপদজনক। ডাটা এক্সেস করতে হবে ওই অবজেক্টের ফাংশন ব্যবহার করে। যেমনঃ

class Student
{
        string id;
        string name;
        ….. ইত্যাদি 

        public string get_name()
        {
            return name;
        }

        public string get_id()
        {
            return id;
        }
};

সুতরাং ইউজার স্টুডেন্ট অবজেক্টের name একসেস করবে এভাবেঃ

Student s;
String n = s.get_name();

Inheritance:
ধরি একটা ক্লাস আছে রেকট্যাংগলের জন্য।

class Rectangle
{
    int width;
    int height;

    public:
        void set_values(int w, int h) { width = w; height = h; }
        int get_area() { return width * height; }
};

কোন ফাংশনের কি কাজ আশা করছি কোড দেখেই বুঝবেন। এখন নতুন একটা ক্লাসের দরকার হল, স্কোয়ার।  রেকট্যাংগল ক্লাসের যেসব ফীচার সেগুলোই দরকার এই ক্লাসেও (ভ্যালু সেট, এরিয়া বের করা এসব)। নতুন করে এসব ইমপ্লিমেন্ট করার দরকার আছে? Inheritance বলছে নেই।

class Square : public Rectangle
{
};

এখানে রেকট্যাংগল ক্লাসের পাবলিক প্রোপার্টিগুলো ইনহেরিট করা হয়েছে। এখনঃ

Square s;
s.set_values(5, 5);
cout<<s.get_area();

এভাবেই স্কোয়ার ক্লাসের প্রোপার্টি পরিবর্তন ও ব্যবহার করা যাবে।
আগেই বলেছি এখানে হালকা একটা ধারণা দিতে চেষ্টা করেছি। পরিস্কার ধারণা পাওয়ার জন্য বই পড়তে হবে।
বিঃ দ্রঃ উদাহরণ গুলো সিম্পল রাখার জন্য এখানে this কি ওয়ার্ড ব্যবহৃত হইলো না।

Re: C++

forhan লিখেছেন:

নির্দিষ্ট বই ফলো করলে বেশি উপকার পাবেন। বইয়ে অনেক কিছু লেখা থাকে যেগুলা পড়লে কনসেপ্ট ক্লিয়ার হয়ে যায়। মোটামুটি ধারণার জন্য একটু উদাহরণ দিইঃ

Polymorphism:
একই অবজেক্ট বা অপারেটর পরিস্থিতি ভেদে ভিন্ন আচরণ করবে। যেমনঃ

1 + 2    /* + অপারেটর এখানে যোগ করার জন্য ব্যবহার হচ্ছে */
“Hello” + “World”    /* + অপারেটর এখানে স্ট্রিং কনক্যাটিনেশনের জন্য ব্যবহার হচ্ছে */

Encapsulation:
এটি ডাটার সাথে ডাটা একসেস বা পরিবর্তন করতে পারে এমন ফাংশন কে সম্পর্কযুক্ত করে। যেমন আমাদের হয়তো একটা ক্লাস আছে Student:

class Student
{
        string id;
        string name;
        ….. ইত্যাদি 
};

এখন কেউ যদি Student ক্লাসের একটা অবজেক্ট এর name বের করতে চায়, কীভাবে করবে?

Student s;    /* s হচ্ছে Student এর অবজেক্ট */
string n = s.name;

Encapsulation বলছে এভাবে ডাটা এক্সেস করা বিপদজনক। ডাটা এক্সেস করতে হবে ওই অবজেক্টের ফাংশন ব্যবহার করে। যেমনঃ

class Student
{
        string id;
        string name;
        ….. ইত্যাদি 

        public string get_name()
        {
            return name;
        }

        public string get_id()
        {
            return id;
        }
};

সুতরাং ইউজার স্টুডেন্ট অবজেক্টের name একসেস করবে এভাবেঃ

Student s;
String n = s.get_name();

Inheritance:
ধরি একটা ক্লাস আছে রেকট্যাংগলের জন্য।

class Rectangle
{
    int width;
    int height;

    public:
        void set_values(int w, int h) { width = w; height = h; }
        int get_area() { return width * height; }
};

কোন ফাংশনের কি কাজ আশা করছি কোড দেখেই বুঝবেন। এখন নতুন একটা ক্লাসের দরকার হল, স্কোয়ার।  রেকট্যাংগল ক্লাসের যেসব ফীচার সেগুলোই দরকার এই ক্লাসেও (ভ্যালু সেট, এরিয়া বের করা এসব)। নতুন করে এসব ইমপ্লিমেন্ট করার দরকার আছে? Inheritance বলছে নেই।

class Square : public Rectangle
{
};

এখানে রেকট্যাংগল ক্লাসের পাবলিক প্রোপার্টিগুলো ইনহেরিট করা হয়েছে। এখনঃ

Square s;
s.set_values(5, 5);
cout<<s.get_area();

এভাবেই স্কোয়ার ক্লাসের প্রোপার্টি পরিবর্তন ও ব্যবহার করা যাবে।
আগেই বলেছি এখানে হালকা একটা ধারণা দিতে চেষ্টা করেছি। পরিস্কার ধারণা পাওয়ার জন্য বই পড়তে হবে।
বিঃ দ্রঃ উদাহরণ গুলো সিম্পল রাখার জন্য এখানে this কি ওয়ার্ড ব্যবহৃত হইলো না।

অনেক ধন্যবাদ আপনাকে।

আমি যাবো সেই পাহাড়ে, যে পাহাড়ে আদৌ কোন মানব সন্তান যেতে পারেনি...

Re: C++

@খাইছি তোরে
এত বড় কোটেশন করবেন না। বিশাল বড় কোটেশন স্ক্রল করে আপনার নিজের লেখা শুধু একটা লাইন দেখতে পাঠকদের বেশ হতাশ হতে হয়। তাই যতটুকু কোটেশন করছেন তার অন্ততঃ তিন ভাগের একভাগ লেখা নিজে লিখুন। নয়ত কোটেশন না করাই ভাল।

Feed থেকে ফোরাম সিগনেচার, imgsign.com
ব্লগ: shiplu.mokadd.im
মুখে তুলে কেউ খাইয়ে দেবে না। নিজের হাতেই সেটা করতে হবে।

শিপলু'এর ওয়েবসাইট

লেখাটি GPL v3 এর অধীনে প্রকাশিত

Re: C++

আপনি http://programscorner.blogspot.com দেখতে পারেন। আশা করি কিছুটা হলেও শিখতে পারবেন।

আরিফুল

Re: C++

C++ সম্বন্ধে অল্পবিস্তর ধারণা আছে।

Re: C++

আপনি সি ++ এর জন্য রবার্ট লেফর এর বই ফলো করতে পারেন।

Raihan Tusher