Abstract Class və Saf Virtual Funksiya

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Abstract Class və Saf Virtual Funksiya

Abstrakt sinif ən azı bir təmiz virtual funksiyası olan bir sinifdir. Saf bir virtual funksiya tərifi olmayan bir funksiyadır. Saf virtual funksiyanı elan etmək üçün aşağıdakı sintaksisdən istifadə edin:

virtual return-type function-name(parameter-list) = 0;

Məsələn, mücərrəd sinif halına gətirmək üçün yuxarıdakı baseClass-ı dəyişdirə bilərik:
class baseClass
{
public:
	baseClass(int val) :someValue(val)
	{

	}
	//pure virtual function
	virtual void info() = 0;
protected:
	int someValue;
};

İndi info () təmiz bir virtual funksiyadır. Bu vəziyyətdə təmiz bir virtual funksiyadan istifadə edərkən siz də gərək çıxarılan siniflərdə onu ləğv edin. Siz mücərrəd sinifin bir obyekti yarada bilməzsiniz, lakin əldə edilmiş sinfin obyektlərini göstərmək üçün yenə də əsas sinifin göstəricilərindən istifadə edə bilərsiniz.

Saf Virtual Destructor

Bildiyimiz kimi, təmiz virtual funksiyalar müəyyən olunmayan (həyata keçirilməyən) funksiyalardır. Bir sinif ən azı bir təmiz virtual funksiyaya sahibdirsə, mücərrəd olur.

C ++ təmiz virtual destruktorlar yaratmaq imkanı verir. Saf virtual destructor da bir sinfi mücərrəd bir sinif halına gətirir, ancaq saf virtual funksiya ilə təmiz virtual destruktor arasında bir fərq var. Saf virtual destruktor gərək həyata keçirilməlidir:

class A
{
public:
	virtual ~A() = 0;
};

A::~A()
{
	cout << "Base class destrctor" << endl;
}

Funksiya gövdəsi ilə təmiz Virtual funksiya

Bəli, aşağıda göstərildiyi kimi bir bədən ilə təmiz bir virtual funksiyaya sahib ola bilərik

class Base
{
   	int x;
public:
    	virtual void fun() = 0
	{
		cout<<"Base Class fun() is Called";
	}
    	int getX() 
	{ 
		return x; 
	}
};
 
class Derived: public Base
{
    	int y;
public:
    	void fun() 
	{ 
		cout << "Derived Class fun() called"; 
	}
};
 
int main(void)
{
    	Derived d;
    	d.fun();
	//Calling Base Class Pure Virtual Function fun()
	Base::fun();
    	return 0;
}

Saf Virtual Funksiyaya zəng etmək üçün Class_Name :: Function_Name sinif adından istifadə etməliyik

Bir funksiya gövdəsi ilə Saf Virtual Funksiyanın istifadəsi

Bəzən ümumi funksionallığı olan baza sinfi funksiyasını törəmə siniflərdə çağırılmasını istəyirsinizsə, eyni məntiqi dəfələrlə yenidən yazmaq əvəzinə təmiz virtual funksiyanın gövdəsində ümumi məntiq yaza bilərik.

 

Crack Sistemi Dizayn Müsahibələri
Translate »