15. Inheritance — meros olish¶
Oldingi bobda class va object bilan tanishdik.
C++ da bir classning xususiyatlarini boshqa classga berish mumkin.
Bu inheritance yoki meros olish deb ataladi.
Inheritance nima?¶
Masalan, bizda Hayvon nomli class bor.
Hayvon:
ism
yosh
kabi xususiyatlarga ega.
Keyin It degan class yaratmoqchimiz.
It ham hayvon bo‘lgani uchun uning ism va yosh xususiyatlari kerak bo‘ladi.
Ularni qaytadan yozish shart emas.
It classi Hayvon classidan meros olishi mumkin.
Oddiy misol¶
Avval Hayvon classini yaratamiz:
class Hayvon {
public:
string ism;
void ovoz() {
cout << "Hayvon ovoz chiqaryapti.";
}
};
Keyin It classini yaratamiz:
class It : public Hayvon {
};
Bu yerda:
It
Hayvon classidan meros olmoqda.
Meros olingan xususiyatdan foydalanish¶
Endi It objectini yaratamiz:
It it1;
Hayvon classidagi ism dan foydalanishimiz mumkin:
it1.ism = "Rex";
Va:
cout << it1.ism;
Natija:
Rex
It classi Hayvon classidan ism xususiyatini meros oldi.
Methodni ham meros olish¶
Hayvon classida:
void ovoz() {
cout << "Hayvon ovoz chiqaryapti.";
}
bor edi.
It undan meros olgani uchun:
It it1;
it1.ovoz();
deb yozishimiz mumkin.
Natija:
Hayvon ovoz chiqaryapti.
To‘liq misol¶
#include <iostream>
#include <string>
using namespace std;
class Hayvon {
public:
string ism;
void ovoz() {
cout << "Hayvon ovoz chiqaryapti.";
}
};
class It : public Hayvon {
};
int main() {
It it1;
it1.ism = "Rex";
cout << it1.ism << endl;
it1.ovoz();
return 0;
}
Natija:
Rex
Hayvon ovoz chiqaryapti.
Yangi xususiyat qo‘shish¶
Meros oluvchi class o‘zining yangi xususiyatlarini ham qo‘shishi mumkin.
Masalan:
class It : public Hayvon {
public:
void hurish() {
cout << "Vov vov!";
}
};
Endi:
It it1;
it1.ism = "Rex";
it1.ovoz();
it1.hurish();
Natija:
Hayvon ovoz chiqaryapti.
Vov vov!
Bu yerda It:
Hayvondanismni oldi;Hayvondanovoz()ni oldi;- o‘zining
hurish()methodiga ega bo‘ldi.
Parent va Child class¶
Inheritance bilan ishlaganda ikkita muhim atama bor.
Meros beruvchi class:
Parent class yoki Base class
Meros oluvchi class:
Child class yoki Derived class
Masalan:
class Hayvon {
};
class It : public Hayvon {
};
Bu yerda:
Hayvon → Parent class
It → Child class
Yana bir misol¶
Transport nomli class yaratamiz.
class Transport {
public:
void yurish() {
cout << "Transport harakatlanmoqda.";
}
};
Keyin Mashina undan meros oladi:
class Mashina : public Transport {
};
Endi:
Mashina mashina1;
mashina1.yurish();
Natija:
Transport harakatlanmoqda.
Child class o‘z methodiga ega bo‘lishi mumkin¶
Masalan:
class Mashina : public Transport {
public:
void signal() {
cout << "Bip bip!";
}
};
Endi:
Mashina mashina1;
mashina1.yurish();
mashina1.signal();
Natija:
Transport harakatlanmoqda.
Bip bip!
Bir nechta child class¶
Bitta parent classdan bir nechta class meros olishi mumkin.
Masalan:
class Hayvon {
public:
void nafasOlish() {
cout << "Nafas olyapti.";
}
};
Keyin:
class It : public Hayvon {
};
class Mushuk : public Hayvon {
};
Endi It ham, Mushuk ham nafasOlish() methodidan foydalanishi mumkin.
Inheritance qachon ishlatiladi?¶
Inheritance bir nechta classlarda umumiy xususiyatlar bo‘lganda foydali.
Masalan:
Hayvon
|
+-- It
|
+-- Mushuk
|
+-- Qush
Yoki:
Transport
|
+-- Mashina
|
+-- Avtobus
|
+-- Mototsikl
Umumiy ma'lumotlarni parent classga yozamiz.
Keyin child classlar undan foydalanadi.
Amaliy misol¶
#include <iostream>
using namespace std;
class Transport {
public:
void yurish() {
cout << "Transport yurmoqda." << endl;
}
};
class Mashina : public Transport {
public:
void signal() {
cout << "Bip bip!" << endl;
}
};
int main() {
Mashina mashina1;
mashina1.yurish();
mashina1.signal();
return 0;
}
Natija:
Transport yurmoqda.
Bip bip!
Inheritance yozilishi¶
Inheritance ning asosiy ko‘rinishi:
class Child : public Parent {
};
Masalan:
class It : public Hayvon {
};
Bu:
It Hayvon dan meros oladi
degan ma'noni bildiradi.
Nima uchun inheritance kerak?¶
Inheritance kodni qayta yozishni kamaytiradi.
Masalan, It, Mushuk va Qush uchun bir xil nafasOlish() methodini alohida yozish shart emas.
Uni Hayvon classiga yozamiz:
class Hayvon {
public:
void nafasOlish() {
cout << "Nafas olyapti.";
}
};
Keyin boshqa classlar undan meros oladi.
Bu dastur kodini tartibli qiladi.
Amaliy mashqlar¶
1-mashq¶
Hayvon classini yarating.
Unda:
ovoz()
methodi bo‘lsin.
Keyin It classini Hayvon dan meros oldiring.
2-mashq¶
Transport classini yarating.
Unda:
yurish()
methodi bo‘lsin.
Keyin Mashina classini undan meros oldiring.
3-mashq¶
Hayvon classidan:
It
Mushuk
classlarini yarating.
Har birida alohida method bo‘lsin.
Masalan:
hurish()
miyovlash()
4-mashq¶
Transport classidan:
Mashina
Avtobus
Mototsikl
classlarini yarating.
Ularning har biriga alohida method qo‘shing.
Muhim narsalarni eslab qoling¶
Inheritance — bir classning xususiyatlarini boshqa classga berish.
Masalan:
class Hayvon {
};
class It : public Hayvon {
};
Bu yerda Hayvon — parent class.
It — child class.
Child class parent classning public xususiyatlari va methodlaridan foydalanishi mumkin.
Child class o‘zining yangi xususiyatlari va methodlarini ham qo‘shishi mumkin.
Inheritance katta dasturlarda classlar orasidagi bog‘lanishni yaratish uchun ishlatiladi.