Mühazirə14: C++-da varislik və virtual funksiyalar. 14.1. C++-da varislik (C++ Inheritance) C++ da varislik Obyekt Yönümlü Proqramlaşdırmanın əsas xüsusiyyətlərindəndir. Proqramçıya mövcud sinif əsasında yeni sinif yaratmağa imkan verir. Mövcud sinif - baza sinif (base class), yeni sinif –varis(törəmə) sinif (derived class) adlanırlar.
Törəmə sinif baza sinifin bütün funksiyalarına varislik edir və özü yeni üzv-funksiyalara və üzv dəyişənlərə malik ola bilər.
Varislik prinsipi- eyni kodu (gəzmək, danışmaq, yemək) müxtəlif siniflərdə təkrar realizasiyasının qarşısını alır. Müxtəlif siniflərdən həmin ümumi kodu istifadə etmək üçün varis sinif olmaq kifayətdir.
Baza sinifinin törəməsi olan varis sinifin sintaksisi:
class varis-sinifin-adı: icazə spesifikatoru baza-sinifin-adı
Burada icazə spesifikatoru - varis sinifin baza sinifin elementlərinə istifadə icazələrini müəyyənləşdirir. Üç tip icazə spesifikatoru mövcuddur: private (xüsusi “bağlı”), protected(qorunan), public(ümumi) .
C++ da varisliyin 5 tipi mövcuddur: Tək varislik - Single Inheritance
Birdən çox varislik- Multiple Inheritance
İerarxik varislik -Hierarchical Inheritance
Çox səviyyəli miras -Multilevel Inheritance
Hibrid varislik (Virtual Miras olaraq da bilinir)-Hybrid Inheritance (Virtual Inheritance)
Bu varislik tiplərinə sxemlərlə izahına baxaq: 1.Single inheritance- bir baza və bir varis sinifdən ibarət sxemdir.
2.Multiple inheritance- törəmə sinif iki və daha artıq baza sinifin varisi ola bilər. Sxem və sintaksisi:
class derived-class-name: access_specifier base-class-name1, access_specifier base-class-name2,…
3. Hierarchical Inheritance-Bir baza sinifdən birdən çox varis sinif törəyə bilər.
4. Multilevel inheritance- hər birvaris sinifin də varisi ola bilər.
5. Hybrid inheritance-Yuxarıdaki tiplərin qarışığından yeni bir varis sinif hazırlaaq olar.
İndi isə nümunədə varisliyin prinsiplərinin izahına baxaq:
Təsəvvür edin ki, yeni yaradacağımız oyunda sizə üç personaj lazımdır: riyaziyyat müəllimi -MathsTeachet, futbolçü-Footballer və biznesmen- Businessman. Bütün bu personajlar insan olduqlarına görə gəzə və danışa bilirlər. Bundan başqa hər biri özəl xüsusiyyətlərə də malikdirlər. Riyaziyyat müəllimi dərs deyə bilir, futbolçü futbol oynaya bilir və biznesmen işı idarə edə bilir.
Aşağıdakı sxemdəki kimi ümumi və özəl xüsusiyyətləri olan üç sinif hazırlaya bilərik:
Hər bir sinifdə eyni funksiyaların (gəzmə , danışma, yemək yemə) kodlarını kopiyalamalıyıq. Belə təkrarlanmanın əlavə çətinliklər yaratması şərhsiz aydındır. Bu ortaq funksiyaları (baza funksiyaları) özündə saxlayan Person adlı sinif yaratmaq təkrarın qarşısını alacaq. Bu işi varisliyin köməyi ilə etmək olar:
Talk(), Walk() üzv-funksiyaları olan Person (baza sinifi) hazirlayırıq. Bu sinifin varisi olan Mathsteacher (törəmə,varis) sinifi hazırlayırıq. Bu sinifin obyekt(lər)i olan Riyaziyyat müəllim(lər)i Person sinifinin bütün funksiyalarına varislik edirlər. Həmçinin və yeni bir TeachMaths() üzv-funksiyasına da malikdirlər. Eyni qayda digər sinifləri (Footballer, Businessman) hazırlayırıq.