C ++ interfeysləri

İnterfeys, bu interfeysi miras alan bir sinifin hansı üzv funksiyaları həyata keçirməli olduğunu izah edir. Başqa sözlə, bir interfeys sinifin davranışını təsvir edir. Bir interfeysi bir sinif tərəfindən həyata keçirilməli olan funksiyalar siyahısı kimi təsəvvür edə bilərsiniz.

İstifadə edərək bir interfeys yaradılır __interface söz:

__interface InterfaceName
{
	//group of functions declarations
}

Yaxşı bir üslub, interfeys adını başlamaqdır I ardından interfeys adı.

Bir interfeys bir və ya daha çox baza interfeysindən funksiyaları miras ala bilər. Yalnız ümumi üzv funksiyaları ehtiva edə bilər. Bunun əksinə, konstruktor, destruktor, məlumat üzvləri və statik üzv funksiyaları ola bilməz.

Bu qaydalara riayət edəcək ümumi təmiz virtual funksiyaları ilə mücərrəd bir sinif kimi bir interfeys yarada bilərsiniz. Lakin, __interface açar söz bu xüsusiyyətləri tətbiq edir.

İnterfeys nümunəsinə baxın:

__interface IPrintable
{
	void Print();
	void PrintBase(int);
};

Bu, IPrintable interfeysinin tərifidir. İki funksiyadan ibarətdir: Print () və PrintBase (int). Sinifinizdə bir interfeys miras almaq istəyirsinizsə, bu funksiyaları bu sinif daxilində həyata keçirməlisiniz. Əgər miras qalmış interfeysdən funksiyaları həyata keçirməsəniz, sinifiniz mücərrədləşəcəkdir.

Məsələn, üç rəqəmdən ibarət bir sıra yaradacağıq:

class SomeData
{
public:
	SomeData(int x, int y, int z)
	{
		X = x;
		Y = y;
		Z = z;
	}
private:
	int X;
	int Y;
	int Z;
};

IPrintable interfeysini SomeData sinifində tətbiq etmək istəyiriksə, sinif bəyannaməsini dəyişdirməliyik:
class SomeData : public IPrintable

İndi funksiyaları həyata keçirməlisiniz IPrintable interfeys SomeData sinif:
void Print()
{
	cout << "X = " << X << endl;
	cout << "Y = " << Y << endl;
	cout << "Z = " << Z << endl;
}
void PrintBase(int base = 10)
{
	if (base != 10 || base != 8 || base != 2)
		base = 10;
	cout << setbase(base);
	cout << "X = " << X << endl;
	cout << "Y = " << Y << endl;
	cout << "Z = " << Z << endl;
	cout << setbase(10);
}

Abstrakt bir sinif istifadə edərək eyni interfeysi edə bilərsiniz. IPrintable interfeysi aşağıdakı şəkildə mücərrəd sinif kimi görünəcək:
class IPrintable
{
public:
	virtual void print() = 0;
	virtual void printBase(int) = 0;
	~IPrintable();
};

Abstrakt sinfə virtual destruktor əlavə etmək çox vacibdir. Virtual destruktor əlavə etməsəniz, obyekt məhv olsa belə, miras qalmış sinifin destruktoru heç vaxt çağırılmayacaq.

Translate »