Unar operatorların yüklənməsi Unar operatorların yüklənməsi binar operatorların yüklənməsinə oxşardır. Bu halda iki operanddan deyil, bir operanddan istifadə olunur. Üzv-funksiyalardan istifadə etməklə unar operatorların yüklənməsində funksiyalar parametrə malik olmurlar. Çünki unar əməliyyatlarda bir operand olduğuna görə operator-funksiya bu operandı generasiya edir.
Aşağıdaki misalda coord sinfinə nəzərən ++ inkrement operatorunun yüklənməsi göstərilmişdir:
//coord sinfinə nəzərən ++ operatorunun yüklənməsi
#include using namespace std; class coord{ int x,y; //koordinatların qiymətləri public: coord( ){x=0;y=0;}
coord(int i, int j){x=i;y=j;} void get_xy(int&i,int&j){i=x;j=y;} coord operator ++( ); }; //coord sinfi üçün ++ operatorunun yüklənməsi
coord coord::operator++( ) { x++; y++; return*this; //qiymət mənimsədildikdən sonra //alınan obyekti qaytarır } int main( ) { coord 01(10,10); int x,y;
++01; //obyektin inkrementi 01.get_xy(x,y); cout<<”(++01)x:”< return 0; } Inkrement operatoru öz operandını vahid qədər aştırdığına görə bu operatorun yüklənməsi nəticəsində obyekt dəyişir. this göstəricisi onu bildirir ki, increment əməliyyatından sonra obyekt dəyişir və bu dəyişən obyekt funksiya daxilindən qaytarılır. Ona görə də increment operatorunu daha mürəkkəb operatorlarda istifadə etmək olar. Məsələ, 02=++01;
6.48.Konstruktorların yüklənməsi C++ dilində sinfin konstruktorunun yüklənməsi sadədir. Sinfin destruktorunu yükləmək olmaz. Konstruktorun yüklənməsindən aşağıdaki üç məqsəd üçün istifadə etmək olar:
-proqramın çevikliyini təmin etmək üçün;
-massivlərlə işləmək imkanını artırmaq üçün;
-konstruktorların surətini almaq üçün.
Sadə halda konstruktorun yüklənməsinə baxaq.
Konstruktorun yüklənməsinin ən çox istifadə olunması obyektlərin inisiallaşdırılması üsullarının seçilməsinin təmin edilməsi ilə əlaqədardır. Məsələ, növbəti proqramda 01-obyektinə başlanğıc qiymət verilir, 02-obyektinə isə başlanğıc qiymət verilmir. Əgər arqumentlərin siyahısı boş olan konstruktor ləğv edilərsə proqram kompilyasiya olunmayacaq. Çünki myclass tipli obyektdə konstruktor olmayacaq.
Əksinə, əgər parametrlə olan konstruktor ləğv edilərsə, proqram yenə də kompilyasiya olunmayacaq. Çünki myclass tipli inisiallaşmış obyektin konstruktoru olmayacaq. Proqramın düzgün kompilyasiyası üçün hər iki konstruktor lazımdır:
#include using namespace std; class myclass{ int x; public: //konstruktorun iki üsulla yüklənməsi
myclass ( ){x=0;} //inisiallaşdırma yoxdur
myclass(int n){x=n;} // inisiallaşdırmavar
int get x( ){return x;} }; int main ( ) { myclass 01(10); //başlanğıc qiymətlə elan etmə myclass 02; //başlanğıc qiymətsiz elan etmə cout<<”01:”<<01.get x( )<<’\n’; cout<<”02:”<<02.get x( )<<’\n’; return 0; }