Мурас алуу жана полиморфизм
Класстардын үй-бүлөсүн куруп, кодду кайра колдонуп, бир чакырууну көп нерсе кылдырабыз
: public Baseменен базалык жана туунду класс түзө аласың,- мураска алынган мүчөлөрдү кайра колдонуп, кеңейтип,
protectedколдоно аласың, - туунду конструктордон базалык конструкторду чакыра аласың,
- полиморфизм үчүн
virtualфункцияларды жанаoverrideколдоно аласың, - базалык класска эмне үчүн
virtualдеструктор кереги бар экенин түшүндүрө аласың.
1. Мурас алуу деген эмне?
Мурас алуу бир класска (туунду класс) башка класстын (базалык класс) мүчөлөрүн автоматтык түрдө алууга мүмкүндүк берет. Анан туунду класс өзүнүн кошумча нерселерин кошо алат. Аны кош чекит жана public менен жазабыз:
#include <iostream>
using namespace std;
class Animal { // base class
public:
void eat() {
cout << "This animal eats food." << endl;
}
};
class Dog : public Animal { // derived class
public:
void bark() {
cout << "Woof!" << endl;
}
};
int main() {
Dog d;
d.eat(); // inherited from Animal
d.bark(); // Dog's own method
return 0;
}
Натыйжа:
This animal eats food.
Woof!
Dog эч качан eat() функциясын жазган эмес, бирок d.eat() иштейт, анткени Dog аны Animalдан мурас алган. Биз «ит — бул жаныбар» дейбиз. Бул «болуп саналат» мамилеси.
2. Класстардын үй-бүлөсүн элестет
Бир базалык класстын көп туунду класстары болушу мүмкүн. Жебе «мурас алат» дегенди билдирет жана ар дайым баладан жогору, ата-энеге карай көрсөтөт:
Dog да, Cat да Animalдагы бардык публикалыкты алат, ошондуктан жалпы код бир жерде жатат. Animalдагы катаны бир жолу оңдо — бардык туунду класстар да оңолот.