6.43.Varis siniflər, onların təyini Varislik-elə bir mexanizmdir ki, bu mexanizm vasitəsi ilə bir sinifin xassələri digər sinifdə istifadə olunur. Varislik mexanizmindən istifadə etməklə siniflərin ierarxiyasını qurmaq olar. Varis sinfə malik olan sinif baza sinif adlanır. Baza sinifdən alınan siniflər törəmə və ya varis siniflər adlanır. Varislik prosesi baza sinfin qurulmasından başlayır. Baza sinfi bu sinfin törəmə siniflərinin hamısı üçün ümumi olan xassələrə malikdir. Törəmə sinifləri bu ümumi xassələrdən əlavə onlara aid olan əlavə xassələrə də malik olurlar.
Baza sinfin varisi olan sinfin təsviri forması aşağıdaki kimidir:
class varis_sinfin_adı: müraciət spesifikatoru_ baza_sinfin_adı{ - - - - - - }; Müraciət spesifikatoru aşağıdaki işçi sözlərdən biri ola bilər:
public(açıq), private(qapalı) və ya protected(qorunan) Varis sinfin təyin olunmasına aid aşağıdaki misala baxaq. Əvvəlcə baza sinfin təsvirinə baxaq:
#include using namespace std; class B{ int i; public: void set_i (int n); int get_i ( ); }; İndi varis sinfi təsvir edək:
class D: public B{ int j; public: void set_j (int n); int mul ( ); };
Burada D-sinfi B-sinfinin varisidir və B-nin bütün komponentlərindən D-də istifadə etmək olar. Varis sinfin elan olunmasında public sözü onu göstərir ki, B-nin bütün qapalı elementləri D üçün də qapalıdır, B-nin bütün açıq elementləri D üçün də açıqdır.
Varis siniflərin elementlərinə müraciət edilməsi B və D-siniflərindən istifadə etməklə onların elementlərinə müraciət edilməsi qaydasına baxaq.
//Bu hissədə yuxarıda göstəriln və siniflərinin təsviri verilir.
//Baza sinifdəki i-yə qiymət verilməsi
void B::set_i (int n) { i=n; } //Baza sinifdən i-nin qiymətinin qaytarılması
int B::get_i ( ) {return i; } //Varis sinifdə j-yə qiymət verilməsi
void D::set_j (int n) { j=n; } //Baza sinfindən i-nin, varis sinifdən j-nın qiymətinin qaytarılması
int D::mul ( )
{ //varis sinif baza sinfin funksiyasına müraciət edə bilər return j*get_i ( ); } int main ( ) { D ob; ob.set_i (10); //Baza sinifdə i-nin yükləməsi ob.set_j (4); //Varis sinifdə j-nın yüklənməsi cout < return 0; } Nəticədə 40 ədədi alınar.
Göründüyü kimi, get_i ( ) funksiyası B-baza sinfinə aid olmasına baxmayaraq ona D-dən müraciət etmək olar. Çünki B-nin açıq üzvü D-nin də açıq üzvüdür. Mul ( ) funksiyası birbaşa i-yə müraciət edə bilmir. Çünki B-nin qapalı üzvü D-üçün də qapalıdır. Ona görə də mul ( ) funksiyası i-yə get_i ( ) funksiyası vasitəsi ilə müraciət edir.