Merosxo’rlik (inheritance) — OOP ning ikkinchi ustuni. U bir sinfga boshqa sinfning barcha xususiyatlarini “meros qilib olish” imkonini beradi. Bu kod takrorlanishini keskin kamaytiradi va sinflarni mantiqiy iyerarxiyaga soladi. Masalan, “Talaba” va “O’qituvchi” — ikkovi ham “Inson”, demak umumiy xususiyatlarni “Inson”dan meros oladi.
Merosxo’rlik — bir sinf (bola/hosila) boshqa sinf (ota/asosiy) ning maydon va metodlarini o’zlashtirishi. Bola sinf otaning hamma imkoniyatini oladi, ustiga o’zinikini qo’shadi.
Asosiy va bola sinf
C++’da meros class Bola : public Ota shaklida yoziladi. Umumiy Inson sinfi va undan meros oluvchi Talaba ni ko’ramiz:
#include <iostream>
#include <string>
using namespace std;
class Inson {
public:
string ism;
void tanishtir() {
cout << "Men " << ism << endl;
}
};
class Talaba : public Inson {
public:
int ball;
};
int main() {
Talaba t;
t.ism = "Master Sherkulov"; // Inson dan meros
t.ball = 95; // o'ziniki
t.tanishtir(); // Inson metodini ishlatadi
cout << "Ball: " << t.ball << endl;
return 0;
}
Men Master Sherkulov
Ball: 95
Talaba sinfi ism maydonini va tanishtir() metodini Inson dan meros oldi, ustiga o’zining ball maydonini qo’shdi. Bir marta yozilgan kod qayta ishlatildi.
Meros turlari
C++’da meros kirish darajasi bilan boshqariladi. Uch turini jadvalda ko’ramiz:
| Tur | Otaning public a’zolari bolada | Eng ko’p ishlatiladi |
|---|---|---|
public |
public bo’lib qoladi | Ha |
protected |
protected bo’ladi | kam |
private |
private bo’ladi | kam |
Amaliyotda deyarli har doim public meros ishlatiladi — u “bola — bu otaning bir turi” munosabatini ifodalaydi.
Metodni qayta yozish (override)
Bola sinf ota sinfdan meros olgan metodni o’ziga moslab qayta yozishi mumkin:
#include <iostream>
using namespace std;
class Inson {
public:
void rol() {
cout << "Oddiy inson" << endl;
}
};
class Oqituvchi : public Inson {
public:
void rol() { // qayta yozildi
cout << "O'qituvchi" << endl;
}
};
int main() {
Inson i;
Oqituvchi o;
i.rol();
o.rol();
return 0;
}
Oddiy inson
O'qituvchi
Bir xil nomli rol metodi ikki sinfda turlicha ishladi. Bola sinf otadan olingan metodni o’z ehtiyojiga moslab o’zgartirdi.
protected kirish darajasi
Meros bilan bog’liq maxsus daraja — protected. U private kabi tashqaridan yashirin, ammo private dan farqli o’laroq, bola sinflarga ko’rinadi:
#include <iostream>
using namespace std;
class Ota {
protected:
int qiymat = 100; // bolaga ko'rinadi, tashqariga yo'q
};
class Bola : public Ota {
public:
int olish() {
return qiymat; // protected — bola ko'ra oladi
}
};
int main() {
Bola b;
cout << b.olish() << endl;
return 0;
}
100
protected — meros iyerarxiyasi ichida ma’lumot ulashishning to’g’ri usuli.
Xulosa
Bu bo’limda merosxo’rlikni, asosiy va bola sinf munosabatini, public merosni, metodni override qilishni va protected kirish darajasini ko’rib chiqdik. Meros kodni qayta ishlatishni yangi darajaga olib chiqadi. Keyingi darsda polimorfizm — merosning eng kuchli davomiga o’tamiz.