6.36.Sinif anlayışı C++ dilinin ən vacib anlayışlarından biri sinif anlayışıdır. Sinif-obyektləri yaratmaq üçün olan mexanizmdir. Sinif Class işçi sözünün köməyi ilə təsvir olunur. Siniflərin təsvir olunması qaydası strukturların təsvirinə oxşardır. Siniflərin təsviri forması aşağıdaki kimidir:
Class{ qapalı funksiyalar və sinfin dəyişənləri
public: açıq funksiyalar və sinfin dəyişənləri
} obyektlərin siyahısı;
Sinfin təsvirində -nı göstərmək vacib deyildir. Strukturlarda olduğu kimi zəruri olan halda sinfin obyektlərini bir qədər sonra da təsvir etmək olar. Sinfin adını vermək də o qədər vacib deyil. Ancaq praktiki nöqqteyi-nəzərdən verilənlərin yeni tipini adlandırmaq və sinfin obyektlərini təsvir etmək üçün sinfin adını vermək lazımdır. Sinfin daxilində təsvir olunan funksiyalar və dəyişənlər sinfin elementləri və ya üzvləri adlanır. Sinfin daxilində təsvir olunan bütün funksiyalar və dəyişənlər susma prinsipinə görə sinif üçün örtülü və ya qapalı hesab olunur. Bu onu bildirir ki, onlara ancaq sinfin digər üzvlərindən müraciət etmək olar. Sinfin açıq üzvlərini təsvir etmək üçün Public işçi sözündən istifadə edilir. Public sözündən sonra iki nöqtə (:) qoyulur. Public sözündən sonra gələn funksiyalara və dəyişənlərə funksiyaların digər üzvlərindən və eləcə də bu sinfin iştirak etdiyi proqramın istənilən hissəsindən müraciət etmək olar.
Sinflərin sadə təsvirinə aid misallar:
Class myclass { //sinfin qapalı elementi
int a; public: void set_a(int num); int get_a( ); }; Bu sinif a-qapalı dəyişəninə və iki set_a və get_a açıq funksiyalarına malikdir. Bu funksiyanın prototipləri sinfin daxilində verilmişdir.
a-dəyişəni sinfin qapalı dəyişəni olduğuna görə myclass sinfindən kənarda yerləşən funksiyalardan bu dəyişənə müraciət etmək olmaz. Set_a və get_a funksiyaları sinfin açıq üzvləri olduğuna görə myclass sinfindən istifadə edən proqramın istənilən yerindən bu funksiyalara müraciət etmək olar. Bu funksiyalar a-dəyişənindən də istifadə edə bilərlər.
Hələlik myclass-sinfində təsvir olunan set_a( ) və get_a( ) funksiyaları təyin olunmamışdır. Sinifdə təsvir olunan funksiyaları təyin etmək üçün sinfin adından sonra 2 ədəd iki nöqtə (::) işarəsi qoyub, sonra isə funksiyanın adını yazmaq lazımdır. Iki ədəd 2 nöqtəyə görünmə (təsir) oblastının genişlənməsi adlanır. Məsələ, set_a( ) və get_a( ) funksiyalarının təyin olunmasını aşağıdaki kimi vermək olar:
void myclass :: set_a(int num)
{ a=num; } int myclass :: get_a( ) {return a;} Set_a( ) və get_a funksiyalarında a dəyişənindən istifadə etmək olar. Çünki bu funksiyalar sinfin üzvləridir.
Sinfin üzvü olan funksiyaların təyin olunmasında aşağıdaki ümumi qaydadan istifadə etmək olar:
Qaytarılan_qiymət_tipi sinfin_adı :: funksiyanın_adı (parametrlərin siyahısı)
{ . . . //funksiyanın gövdəsi } Burada sinfin adı təyin olunan funksiyanın yerləşdiyi sinfin adıdır.
myclass sinfinin élan olunması myclass tipli heç bir obyektin təyin etmir. Ancaq obyektin tipini təyin edir. Obyekt yaratmaq üçün sinfin adından istifadə etmək lazımdır. Məsələ, myclass tipli iki obyekt təyin olunmuşdur: myclass ob1, ob2; //myclass tipli obyektlər
Sinfin elanı məntiqi məna daşıyır və obyektin yeni bir tipini müəyyən edir. Sinif tipindən olan obyekti təsviri isə fiziki məna daşıyır, belə ki, obyekt üçün yaddaş sahəsi ayrılır. Ancaq tip üçün yaddaş sahəsi ayrılmır.
Sinfin obyekti yarandıqdan sonra (.)-nöqtə operatorundan istifadə etməklə sinfin açıq üzvlərinə müraciət etmək olar. Məsələ, ob1 və ob2 obyektləri üçün set_a( )-funksiyasına müraciət aşağıdaki kimi olar:
ob1.set_a(10);//ob1-nin a-dəyişəni 10-na bərabər olur. ob2.set_a(99);//ob2-nin a-dəyişəni 99-a bərabər olur. Hər bir obyektdə sinifdə olan verilənlərin sürətləri yerləşir. Bu o deməkdir ki, ob1-obyektindəki a ilə ob2-dəki a bir-birindən fərqlidir.