C++ Inheritance

Introduction to C++ Inheritance

Object oriented programming का एक सबसे महत्वपूर्ण feature ये है की आप एक class में create किये गए member functions और data members को दूसरी class में access करके यूज़ कर सकते है। Object oriented programming का यह feature inheritance कहलाता है।

Inheritance का मतलब विरासत में कुछ प्राप्त करना होता है। मान लीजिए कोई एक person है John, उसके पिताजी (Mr. Max) के pass अच्छा घर, गाड़ी और व्यापार है। ये सब john को विरासत के रूप में प्राप्त हुआ है और इसके लिए john ने कोई काम नहीं किया है।

इसी प्रकार एक class भी किसी दूसरी class से विरासत में data members और functions को प्राप्त कर सकती है। इसे inherit (विरासत में प्राप्त करना) करना कहते है। जिस class को inherit किया जाता है वह base class या parent class कहलाती है। जो class inherit करती है वह derived class या child class कहलाती है।

ऊपर दिए गए उदाहरण के अनुसार john के पिताजी Mr. Max एक base या parent class है और john एक derived या child class है। आइये अब देखते है की आप किस प्रकार एक class को inherit करके उसके data members और functions को यूज़ कर सकते है।

Deriving a Class

Class derive करने का general syntax नीचे दिया जा रहा है।

class derived-class-name : access-specifier base-class-name
{
       //Derived data members & function
};  

सबसे पहले class keyword define किया जाता है। इसके बाद inherit करने वाली class का नाम दिया जाता है। इसके बाद colon (:) operator लगाया जाता है। इसके बाद access specifier लगाया जाता है। Access specifiers inheritance की visibility बताते है। इनके बारे में आप आगे जानेंगे। इसके बाद उस class का नाम define करते है जिसे inherit किया गया है, जो की base class या parent class कहलायेगी। इसके बाद आप child class के लिए data members और member functions define करेंगे।

एक child class base class के members को inherit करने के अलावा खुद के भी members define करती है। Base class के members को आपको दुबारा child class में declare या define करने की आवश्यकता नहीं होती है, इन्हें सीधा child class के object के द्वारा base class से ही access किया जाता है।

आइये इसे अब एक उदाहरण के माध्यम से समझने का प्रयास करते है। मान लीजिये आपने Mr-Max नाम से एक class create की है।

class MrMax
{
      private:
                int cash = 10000000;
       public:
                void Nice&BigHome(void)
                {
                     cout<<"I have a beautiful nice home"<<endl;
                }
                void ShinyCar(void)
                {
                     cout<<"I have beautiful expensive car"<<endl;
                }
                void GrowingBussiness(void)
                {
                     cout<<I have good growing bussiness"<<endl;
                }
                void MuchCash(void)
                {
                      cout<<"I have much cash : "<<cash<<endl;
                }
};

अब मान लीजिये कोई दूसरी class है John जो इस class को inherit करना चाहती है। ऐसा इस प्रकार किया जा सकता है।

class John:public MrMax
{
          private:
                   int age=20;
          public:
                   void PersonalInfo(void)
                   {
                        cout<<"Hi, I am john and my age is"<<age<<endl;
                   }
};

एक बार inherit करने के बाद John class के object के द्वारा Mr-Max class के किसी भी public data member और member functions को inherit कर सकते है। इसका उदाहरण नीचे दिया जा रहा है।

int main()
{
       John obj;

       obj.PersonalInfo();
       obj.Nice&BigHome();
       obj.ShinyCar();
       obj.GrowingBussiness();
       obj.MuchCash();

       return 0;
}

जैसा की आप देख सकते है John class के object द्वारा Mr-Max class के member functions को call किया गया है। यँहा पर ऐसा करना इसलिए possible है क्योंकि John class ने object oriented programming का inheritance feature यूज़ करके Mr-Max class को inherit किया है। इसे निचे एक complete उदाहरण के रूप में दिया जा रहा है।

#include <iostream>
using namespace std;

class MrMax
{
      private:
                int cash = 10000000;
       public:
                void Nice&BigHome(void)
                {
                     cout<<"I have a beautiful nice home"<<endl;
                }
                void ShinyCar(void)
                {
                     cout<<"I have beautiful expensive car"<<endl;
                }
                void GrowingBussiness(void)
                {
                     cout<<I have good growing bussiness"<<endl;
                }
                void MuchCash(void)
                {
                      cout<<"I have much cash : "<<cash<<endl;
                }
};  

class John:public MrMax
{
          private:
                   int age=20;
          public:
                   void PersonalInfo(void)
                   {
                        cout<<"Hi, I am john and my age is"<<age<<endl;
                   }
};

int main()
{
       John obj;
       obj.PersonalInfo();
       obj.Nice&BigHome();
       obj.ShinyCar();
       obj.GrowingBussiness();
       obj.MuchCash();

       return 0;
}

ऊपर दिया गया program निचे दिया गया output generate करता है।

Hi, I am john and my age is 20
I have a beautiful nice home
I have beautiful expensive car
I have good growing bussiness
I have mucn cash : 1000000

Visibility Modes

जब भी आप किसी class को derive करते है तो base class से पहले access specifier define किया जाता है। जैसे की ऊपर दिए गए उदाहरण में Mr-Max class को inherit करते समय public access specifier define किया गया है।

ये access specifier visibility mode define करते है। इस प्रकार inheritance 3 visibility modes में perform किया जा सकता है। इनके बारे में नीचे detail से दिया जा रहा है।

Public Mode

ये सबसे अधिक यूज़ किये जाने वाला mode है। इस mode में base class के सभी public members derived class में public members बन जाते है और सभी protected members derived class में protected members बन जाते है।

Protected Mode

इस mode में base class के सभी public और protected members derived class में protected members बन जाते है। इस mode को enable करने के लिए आप class को inherit करते समय base class से पहले protected access specifier लगाते है।

Private Mode

इस mode में base class के सभी public और protected members derived class में private members बन जाते है। Class को inherit करते समय यदि आप कोई भी access specifier नहीं define करते है तो वह by default private visibility mode होता है।

Types of Inheritance

C++ में आप 5 प्रकार से inheritance को implement कर सकते है। इनके बारे में नीचे detail से बताया जा रहा है।

Single Inheritance

इस तरह के inheritance में एक base class एक derived class को inherit करती है। पहले ऊपर explain किया गया उदाहरण इसी category का inheritance है।

Multiple Inheritance

इस तरह के inheritance में एक class एक से ज्यादा base classes को inherit करती है। उदाहरण के लिए कोई class A है, यह class D और E classes को inherit करती है तो ऐसी situation में ये multiple inheritance हो जायेगा।

Multilevel Inheritance

इस तरह के inheritance में inherit करने वाली class को भी inherit कर लिया जाता है। उदाहरण के लिए कोई class A है। इस class को कोई दूसरी class B inherit करती है और B class को कोई तीसरी class C inherit करती है तो ऐसी situation में ये एक multilevel inheritance हो जायेगा। यानि कोई derived class को भी inherit कर लिया जाता है।

Hierarchical Inheritance

इस तरह के inheritance में एक class को एक से अधिक classes inherit करती है। उदाहरण के लिए कोई class A है। इस class को B,C और D class inherit करती है। ऐसी situation में ये hierarchical inheritance माना जाएगा।

Hybrid Inheritance

इस तरह का inheritance Hierarchical और multilevel inheritance का combination होता है। उदाहरण के लिए कोई दो class A और B है जिन्हें एक class C inherit करती है। इस C class को कोई और दो D और E classes inherit करती है। ऐसी situation में यह hybrid inheritance होगा।