6.39.Konstruktorlar və onların təyini Həcmi böyük olan proqramların tərtibində onların bəzi hissələrində inisiallaşdırma əməliyyatı tələb olunur. Inisiallaşdırma əməliyyatı obyektlərlə işlədikdə daha çox tələb olunur. Belə ki, hər bir yeni yaradılan obyekt üçün müəyyən növ inisiallaşdırma əməliyyatı tələb olunur. Bu məsələni həll etmək üçün C++ dilində sinfin təsvirində konstruktor adlanan funksiyadan istifadə edilir. Hər dəfə sinfin yeni obyekti yarananda sinfin konstruktoruna müraciət edilir. Beləliklə, konstruktor olduqda obyektin inisiallaşdırması avtomatik olaraq yerinə yetirilir. Konstruktor sinfin adı ilə eyni olan ada malik olur və qiymət qaytarmır. Aşağıdaki proqramda konstruktorla olan sinif nümayış etdirilmişdir:
#include using namespace std; class myclass{ int a; public: myclass( );//konstruktor void show( ); };
myclass::myclass( ) {cout<<”konstruktorun məzmunu \n”: a=10; } void myclass :: show( ) {cout< } int main( ) {myclass ob; ob.show( ); return 0; } Bu sadə misalda a-dəyişəni myclass( )-konstruktoru vasitəsi ilə inisiallaşdırılır. ob-obyekti yaranan zaman konstruktora müraciət edilir. Obyekt elan olunan zaman isə obyekt yaradılır. Bu C++ dilinin xarakterik cəhətidir. C-dilindən fərqli olaraq C++ dilində dəyişənin təsviri ilə “əməliyyat qaydalı” müəyyən olunur. Belə ki, C++ dilində obyekt konstruktora malikdirsə, dəyişənin elan olunması konstruktorda müəyyən olunan əməliyyatların yerinə yetirilməsini təmin edir.
Lokal obyektlər üçün dəyişənin elan olunması yerinə yetirildikdə konstruktora müraciət edilir. Qlobal obyektlər üçün isə proqram yerinə yetirilməyə başladıqda konstruktora müraciət edilir.
6.40. Destruktorlar və onların təyini Konstruktora əks olan əməliyyatı yerinə yetirən funksiya destruktor adlanır. Bu funksiya obyektləri ləğv edən zaman çağrılır. Adətən obyektlərlə işləyən zaman onların ləğv edilməyi anında müəyyən əməliyyatın yerinə yetirilməsi lazım gəlir. Məsələ, obyekti yaradan zaman onun üçün yaddaş sahəsi ayrılır və obyekti ləğv edən zaman bu yaddaş sahəsini azad etmək zəruriyyəti yaranır. Destruktorun adı sinfin adı ilə eyni olur və destruktorun adının əvvəlində ~ (tilda) işarəsi qoyulur. Destruktorun təyininə aid aşağıdaki misala baxaq:
#include using namespace std; class myclass{ int a; public: myclass( ); //konstruktor ~myclass( );//destruktor void show( ); }; myclass :: myclass( ) {cout<<”konstruktorun məzmunu \n”; a=10; }