C ++ dilində Üzv funksiyalarının növləri

Ü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:

  1. Sadə funksiyalar
  2. Const funksiyaları
  3. Statik funksiyalar
  4. Inline funksiyaları
  5. 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.

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);

Translate »