Inheritance

C++ da Inheritance haqida

C++ da Inheritance

C++ da class a’zolari va funksiyalari (methods ) ni boshqa classlarga meros sifatida olib o’tishga ruxsat beriladi ya’ni bir class ikkinchi class hususiyatlaridan foydalana oladi. Ushbu holatda classlar ikkiga ajratiladi:

  • Derrived class - biror bir classning funksiya yoki o’zgaruvchilarini meros qilib olgan class. (child class ham deb nomlanadi)
  • Base class - Meros olingan class. (parent class ham deb nomlanadi)

Barchamiz yoshlikda o’ynagan Counter-strike o’yini esingizdami? Inheritanceni yaxshiroq tushunish uchun ushbu o’yinni misol qilaman. O’yinda ikki xil o’yinchilar mavjud Terrorist va Counter - Terrorist. Bu ikkalasini umumiylashtrish uchun biz Player ya’ni o’yinchi classini hosil qilamiz va ikkala o’yinchilardagi umumiy sifatlarni belgilaymiz.

// the base class
class Player{
     private:
     int health;
     int armor;
     string rifle;
 
 
     public:
 
       Player(int h, int a, string r){
         health = h;
         armor = a;
         rifle = r;
       }
 
 
}

Yuqorida Player classini health, armor va rifle o’zgaruvchilari va konstruktor funksiyasi bilan e’lon qildik. O’yinimizda yana umumiy bo’lgan narsalardan o’q uzish va ma’lumotlarni ko’rsatib turish mavjud. Keling ushbu funksiyalarni ham Player classimizga qo’shib olamiz.

class Player{
     private:
     int health;
     int armor;
     string rifle;
 
 
     public:
 
// konstruktor funksiyasi
       Player(int h, int a, string r){
         health = h;
         armor = a;
         rifle = r;
       };
 
// o'q uzish funksiyasi
      void shoot(){
 
        cout << "Shooting... " << rifle << "!" << endl;
      };
 
      // barcha ma'lumotlarni ekranga chiqarish funksiaysi
      void showStatus(){
 
        cout << "Health:" << health << endl;
        cout << "Armor:" << armor << endl;
        cout << "Rifle:" << rifle << endl;
      };
 
}

Yuqorida biz Player classimizga o’q uzish va o’yinchi ma’lumotlarini ekranga chop qilish funksiyalarini qo’shdik. Endi esa mavzuga oid bo’lim inheritancega keldi yani Player classimizdan Derrived classlarimizni (Terrorist va Counter Terrorist) hosil qilishimiz mumkin.

// Player classi hususiyatlarini meros qilib oluvchi Terrorist classini e'lon qilish
class Terrorist: public Player {
    public:
    // Player konstruktoriga asoslangan Terrorist konstruktori e'lon qilish
    Terrorist(int h, int a, string r): Player(h,a,r){};
     // Faqatgina Terrorist o'yinchilarga tegishli funksiya bomba aktivlashtirish funksiyasi
      void plantBomb(){
       cout << "The bomb has been planted!!!" << endl;
      };
 
};

Yuqorida Terroristlarga tegishli classimizni e’lon qildik endi esa qarama qarshi taraf CounterTerrorist classimizni e’lon qilib olamiz. Ushbu classimizni ham Player base classimizga asoslangan holda e’lon qilamz.

//  Player classi hususiyatlarini meros qilib oluvchi CounterTerrorist classini e'lon qilish
class CounterTerrorist : public Player{
     public:
        // Player konstruktoriga asoslangan CounterTerrorist konstruktori e'lon qilish
     CounterTerrorist(int h, int a, string r): Player(h,a,r){}
 
// faqat CounterTerrorist o'yinchilariga tegishli bo'lgan bombani zararsizlantirish uchun funksiya
     void defuseBomb(){
        cout << "The bomb has been defused!!!" << endl;
     };
 
};

Navbat yuqorida yozgan ko’dlarimizni asosiy main() funksiyamiz ichida chaqirib ishga tushirib ko’ramiz.

int main() {
 
// Terrorist o'yinchisini hosil qilish
Terrorist t(100, 100, "ak-47");
// CounterTerrorist o'yinchisini hosil qilish
CounterTerrorist ct(100, 100, "M4A1");
 
// Terrorist o'yinchisi uchun ma'lumotlarni ekranga chop qilish
t.showStatus();
// Terrorist o'yinchisi uchun o'q uzish funksiyasi ishga tushirish
t.shoot();
// CounterTerrorist o'yinchisi uchun o'q uzish funksiyasini ishga tushirish
ct.shoot();
// Terrorist o'yinchilari bombani aktivlashtirish funksiyasi
t.plantBomb();
 
// CounterTerrorist bombani deaktivatsiya qilish funksiyasini ishga tushurish
ct.defuseBomb();
 
  return 0;
}

Yuqorida plantBomb() va defuseBomb() funksiyalari maxsus funksiyalar hisoblanib istalgan o’yinchi uchun amal qilmaydi ya’ni belgilangan o’yinchilar uchun amal qiladi. misol uchun quidagi holatda dastur xato beradi :

ct.plantBomb();

Ushbu holatda Terrorist o’yinchilariga tegishli funksiyani CounterTerrorist classidan chaqirilgani uchun dastur xatolikka uchraydi.

Ushbu bo’limda OOP uslubi asosiy tushunchalaridan biri bo’lgan Inheritanceni tushunishga harakat qildik va yoshlikdagi o’yningiz haqida dasturiy tomonlama ozgina umumiy tushuncha berishga harakat qildik. O’zingiz classlar va OOP uslubidan foydalangan holda o’yinning boshqa funksiyalarini ham qo’shib ko’rishingiz mumkin.

Last updated on

On this page

Xato haqida xabar berish