C++ merosxo'rlik (Inheritance)
Meros Object-oriented programming in C++ ning asosiy xususiyatlaridan biridir. Bu bizga mavjud sinfdan (asosiy sinf) yangi class (hosil sinf) yaratish imkonini beradi.
Olingan sinf asosiy sinfdan xususiyatlarni meros qilib oladi va o'ziga xos qo'shimcha xususiyatlarga ega bo'lishi mumkin. Masalan,
class Animal {
// eat() funksiyasi
// uyqu() funksiyasi
};
class Dog : public Animal {
// bark() funksiyasi
};
Bu erda Dog klassi Animal sinfidan olingan. Dog Animal dan olinganligi sababli, Animal a'zolari Dog ga kirishlari mumkin.
Inheritance in C++

Itni hayvondan meros qilib olishda public kalit so'zidan foydalanishga e'tibor bering.
class Dog : public Animal {...};
public o'rniga private va protected kalit so'zlaridan ham foydalanishimiz mumkin. private , public va protected dan foydalanish o'rtasidagi farqlar haqida keyinroq ushbu qo'llanmada bilib olamiz.
Meros - bu munosabatlardir. Biz merosdan faqat ikkita sinf o'rtasida is-a munosabatlari mavjud bo'lganda foydalanamiz.
Mana bir nechta misollar:
// Merosni ko'rsatish uchun C++ dasturi
#include <iostream>
using namespace std;
// asosiy sinf
class Animal {
public:
void eat() {
cout << "I can eat!" << endl;
}
void sleep() {
cout << "I can sleep!" << endl;
}
};
// olingan sinf
class Dog : public Animal {
public:
void bark() {
cout << "I can bark! Woof woof!!" << endl;
}
};
int main() {
// Dog sinfining ob'ektini yarating
Dog dog1;
// Asosiy sinf a'zolarini chaqirish
dog1.eat();
dog1.sleep();
// Olingan sinfning a'zosini chaqirish
dog1.bark();
return 0;
}
Chiqish
I can eat!
I can sleep!
I can bark! Woof woof!!
Bu erda dog1 ( Dog olingan sinf ob'ekti) Animal asosiy sinf a'zolariga kirishi mumkin. Buning sababi, Dog Animal dan meros qilib olingan.
// Hayvonlar sinfi a'zolarini chaqirish
dog1.eat();
dog1.sleep();
Kirish modifikatori protected ayniqsa C++ merosi haqida gap ketganda dolzarbdir.
private a'zolari kabi, protected a'zolariga sinfdan tashqari kirish mumkin emas. Biroq, ularga olingan sinflar va do'st sinflari/funksiyalari orqali kirish mumkin.
Agar biz sinf ma'lumotlarini yashirishni istasak, lekin shunga qaramay, bu ma'lumotlar uning olingan sinflar tomonidan meros qilib olinishini istasak, bizga protected a'zolari kerak bo'ladi.
Himoyalanganlar haqida ko'proq bilish uchun C++ Access Modifiers o'quv qo'llanmamizga qarang.
// Himoyalangan a'zolarni namoyish qilish uchun C++ dasturi
#include <iostream>
#include <string>
using namespace std;
// asosiy sinf
class Animal {
private:
string color;
protected:
string type;
public:
void eat() {
cout << "I can eat!" << endl;
}
void sleep() {
cout << "I can sleep!" << endl;
}
void setColor(string clr) {
color = clr;
}
string getColor() {
return color;
}
};
// olingan sinf
class Dog : public Animal {
public:
void setType(string tp) {
type = tp;
}
void displayInfo(string c) {
cout << "I am a " << type << endl;
cout << "My color is " << c << endl;
}
void bark() {
cout << "I can bark! Woof woof!!" << endl;
}
};
int main() {
// Dog sinfining ob'ektini yarating
Dog dog1;
// Asosiy sinf a'zolarini chaqirish
dog1.eat();
dog1.sleep();
dog1.setColor("black");
// Olingan sinfning a'zosini chaqirish
dog1.bark();
dog1.setType("mammal");
// Argument sifatida dog1 ning getColor() dan foydalanish
// getColor() string ma'lumotlarini qaytaradi
dog1.displayInfo(dog1.getColor());
return 0;
}
Chiqish
I can eat!
I can sleep!
I can bark! Woof woof!!
I am a mammal
My color is black
Bu erda o'zgaruvchining turi protected va shuning uchun Dog olingan sinfdan foydalanish mumkin. function setType() yordamida Dog sinfida type ni ishga tushirganimizda buni ko'rishimiz mumkin.
Boshqa tomondan, private o'zgaruvchan rangini Dog da ishga tushirib bo'lmaydi.
class Dog : public Animal {
public:
void setColor(string clr) {
// Xato: "Animal::color" a'zosiga kirish imkonsiz
color = clr;
}
};
Bundan tashqari, protected kalit so'zi ma'lumotlarni yashirganligi sababli, biz Dog yoki Animal sinfidagi ob'ektdan to'g'ridan-to'g'ri turga kira olmaymiz.
// Xato: "Animal::type" a'zosiga kirish imkonsiz
dog1.type = "mammal";
Oldingi darslarimizda biz umumiy, xususiy va himoyalangan kabi C++ kirish spetsifikatsiyalari haqida bilib oldik.
Hozirgacha biz public kalit so'zidan sinfni ilgari mavjud bo'lgan asosiy sinfdan meros qilib olish uchun ishlatdik. Biroq, biz sinflarni meros qilib olish uchun private va protected kalit so'zlaridan ham foydalanishimiz mumkin. Masalan,
class Animal {
// kod
};
class Dog : private Animal {
// kod
};
class Cat : protected Animal {
// kod
};
Sinflarni olishning turli usullari kirish rejimlari deb nomlanadi. Ushbu kirish rejimlari quyidagi ta'sirga ega:
public rejimida e'lon qilingan bo'lsa, unda asosiy sinf a'zolari xuddi o'zlari kabi olingan sinf tomonidan meros qilib olinadi.private a'zolariga aylanadi.public a'zolari olingan sinfda protected a'zolariga aylanadi.Asosiy sinfning private a'zolari har doim olingan sinfda private bo'ladi.
Batafsil ma’lumot olish uchun C++ public, private, protected inheritance qo‘llanmamizga tashrif buyuring.
Aytaylik, asosiy sinf va hosila sinf bir xil nom va argumentlarga ega bo'lgan a'zo funksiyalariga ega.
Agar biz olingan sinfning ob'ektini yaratsak va bu a'zo funksiyaga kirishga harakat qilsak, asosiy sinfdagi o'rniga hosila sinfdagi a'zo funksiyasi chaqiriladi.
Olingan sinfning a'zo funksiyasi asosiy sinfning a'zo funksiyasini bekor qiladi.
Function overriding in C++ haqida ko'proq bilib oling.