Üzv funksiyaları C ++ siniflərinin bir hissəsidir. Üzv funksiyaları bir sinifin davranışını təmsil edir. Bütün üzv funksiyaları aşağıdakı kateqoriyalara bölmək olar:
- Sadə funksiyalar
- Const funksiyaları
- Statik funksiyalar
- Inline funksiyaları
- Virtual funksiyalar
Dost funksiyaları üzv funksiyası olmasa da, dost funksiyalarının istifadəsini də müzakirə edəcəyik. Dost funksiyaları bir sinifin xüsusi üzvlərinə belə daxil ola bilər. Buna görə də sinif obyektlərini idarə etmək üçün istifadə olunurlar.
Fərqli üzv funksiyalarını təsvir etməyə başlamazdan əvvəl bilməli olduğunuz vacib bir qeyd var. Yaxşı bir üslub, sinifin interfeysini tətbiqindən ayırmaqdır. Başlıq faylı (genişləndirmə .h) bir sinifin nə olduğunu təyin etməlidir. Mənbə faylı bir sinifin necə işlədiyini təyin etməlidir. Məsələn, sinif Şəxs əvvəlki mövzulardan 2 fayla ayrılmalıdır. Birincisi, məlumat üzvlərini təsvir edən və funksiyaların bəyannaməsini ehtiva edən başlıq faylıdır:
#include #include #include using namespace std; class Person { public://access control string firstName;//these data members string lastName;//can be accessed tm dateOfBirth;//from anywhere protected: string phoneNumber;//these members can be accessed inside this class, int salary;// by friend functions/classes and derived classes private: string address;//these members can be accessed inside the class unsigned long int insuranceNumber;//and by friend classes/functions public: bool setInsuranceNumber(unsigned long int insurance); string getAddress(); long int getInsuranceNumber(); };
Və mənbə faylı elan edilmiş funksiyaları həyata keçirməlidir:
#include "Person.h" bool Person::setInsuranceNumber(unsigned long int insurance) { if (insurance > 100000000 && insurance < 999999999) { insuranceNumber = insurance;//a correct value is set return true;//everything is ok } else //do not set incorrect value and return false return false; } string Person::getAddress() { if (!address.empty()) return address; else return "Attention!!! Address is empty"; } long int Person::getInsuranceNumber() { return insuranceNumber; }
Sinif bəyannaməsi xaricində bir funksiya tətbiq etdiyiniz zaman, sinfin adını ilə təyin etməlisiniz
::
funksiyanın identifikatorundan əvvəl.
Mündəricat
Sadə funksiya
Sadə funksiyalar bəyannamədə istifadə edilən hər hansı bir xüsusi açar sözə sahib olmayan funksiyalardır. Xüsusi bir davranışları yoxdur və bir sinifin məlumat üzvləri ilə manipulyasiya edirlər. Sadə üzv funksiyalarının elan edilməsi üçün istifadə olunan sintaksis bunlardır:
ReturnType FunctionName (ParameterList);
Sinif şəxsində bəzi sadə funksiyaları elan etdik:
void printPerson() { cout << "First name " << firstName << endl; cout << "Last name " << lastName << endl; cout << "Year of Birth " << dateOfBirth.tm_year << endl; } string getAddress() { return address; } long int getInsuranceNumber() { return insuranceNumber; }
Const funksiyası
Const funksiyası "yalnız oxumaq" funksiyasını təyin etmək üçün istifadə olunur. Bu növ funksiya statik olmayan məlumat üzvlərini dəyişdirə və ya digər qeyri-üzv üzv funksiyalarına zəng edə bilməz. Sabit bir funksiyanı elan etmək istəyirsinizsə əlavə etməlisiniz const parametr siyahısının mötərizəsindən sonra açar söz:
ReturnType FunctionName (ParameterList) const;
The const açar söz həm bəyanatda, həm də üzv funksiyasının həyata keçirilməsində istifadə olunmalıdır. Məsələn, getAddress üzv funksiyasını const birinə dəyişə bilərik:
string getAddress() const;
Bu funksiya sabitdir və heç bir məlumat üzvünü dəyişdirə bilməz:
string Person::getAddress() const { if (!address.empty()) return address; else return "Attention!!! Address is empty"; }
Statik funksiya
Statik funksiyaları sinif əhatə dairəsinə malikdir. Heç bir statik olmayan məlumat üzvlərini dəyişdirə və ya statik olmayan üzv funksiyalarına zəng edə bilməzlər. Statik üzv funksiyaları gizli deyil bu mübahisə. Bu səbəbdən yalnız statik sinif üzvləri ilə işləyə bilərlər. Statik üzv funksiyaları aşağıdakı formatdan istifadə edərək elan edilə bilər:
statik ReturnType FunctionName (ParameterList);
Statik üzv funksiyaları virtual elan edilə bilməz. Statik üzv funksiyasını elan etmək üçün bir nümunə:
static void getInfo();
Bu funksiyanın həyata keçirilməsi üçün const açar söz tələb olunmur:
void Person::getInfo() { cout << "This is Person class" << endl; }
Bu sinifin heç bir obyekti yaratmadan statik funksiyaya zəng edə bilərsiniz. Yalnız sinif adını və ardından onu təyin etməlisiniz
::
Person::getInfo();
Inline funksiyası
Inline funksiyaları istifadə edərək elan edilir daxili açar söz. İnline funksiyaların məqsədi “İnline funksiyaları” nda ətraflı şəkildə müzakirə olunur. Sinif bəyannaməsi daxilində həyata keçirilən bütün funksiyalar sıradakı üzv funksiyalardır.
Virtual üzv funksiyası
Virtual üzv funksiyası törədilən sinifdə həddindən artıq yüklənməsi gözlənilən üzv funksiyalardır. Virtual funksiyalar irsiyyətdə istifadə olunur - baza sinfində bir göstərici istifadə edərək baza sinifində virtual elan olunan bir sintez edilmiş bir funksiyanı çağırdığınızda düzgün davranış təmin edir. Virtual funksiyalardan istifadə nümunələri “C ++ Miras” da təsvir edilmişdir.
Dost funksiyası
Dost funksiyası bir sinifin üzv funksiyası olmayan, ancaq bir sinifin xüsusi və qorunan üzvlərinə çıxışı olan bir funksiyadır. Dost funksiyası sinif xaricində sadə bir funksiya olaraq elan edilir və həyata keçirilir. Lakin sinif bu funksiyanı elan edərək “dost” imtiyazları verməlidir dost sinif elanının içərisində açar söz. Budur üçün bir dost funksiyası yaratmağın bir nümunəsi Şəxs sinif:
bool checkSalary(Person p) { if (p.salary > 40000) //salary is protected data member return true; else return false; }
Bu qlobal əhatə dairəsi olan bir funksiyadır. Sinif içərisində elanını əlavə etməliyik dost söz:
friend bool checkSalary(Person p);//friend function
Giriş spesifikatorları dost funksiyalarını təsir etmir. Bu səbəbdən onlar sinifin istənilən yerində elan edilə bilər. İndi zəng edə bilərsiniz əmək haqqı əsasdan sadə bir funksiya kimi:
bool result = checkSalary(person1);