Konstruktorlardan istifadə etməklə massivin inisiallaşdırılması Parametrlə və parametrsiz konstruktorlardan inisiallaşmış və inisiallaşmamış massivləri yaratmaq üçün də istifadə etmək olar. Aşağıdaki misalda myclass tipli iki massiv elan olunur. Onlardan biri inisiallaşdırılır, digəri isə inisiallaşdırılmır.
#include using namespace std; class myclass { int x; public: //iki üsulla konstruktorun yüklənməsi
myclass ( ){x=0;} //inisiallaşdırma yoxdur
myclass(int n){x=n;} // inisiallaşdırma var
int get x( ){return x;} }; int main ( ) {myclass 01[10]; // inisiallaşdırma olmayan massivin elanı
myclass 02[10]={1,2,3,4,5,6,7,8,9,10}; //inisializasiya ilə massivin elanı
int i; for(i=0;i<10;i++){ cout<<”01[“< cout<<’\n’; cout<<”02[“< cout<<’\n’; } return 0; } Bu misalda konstruktor 01 massivinin bütün elementlərinə sıfır mənimsədir. 02 massivinin elementləri isə proqramda göstərildiyi qaydada inisiallaşdırılır.
6.49.Dost funksiyalar Sinfin qapalı elementlərinə müraciət etmək üçün bu sinfin üzvü olmayan başqa bir funksiyadan istifadə edilir. Belə funksiyalara dost funksiyalar(friend functions) deyilir. Dost funksiyalar sinfin üzvü deyildir, lakin onun qapalı elementlərinə müraciət etmək imkanı vardır. Dost funksiyalar əsas operatorların yüklənməsində və xüsusi giriş-çıxış funksiyalarınnın hesablanmasında geniş istifadə edilir. Dost funksiyalar adı funksiyalar kimi verilir, sadəcə olaraq onun prototipinin əvvəlində friend sözü yazılır. Dost funksiyaların necə işləməsini başa düşmək üçün aşağıdaki proqrama baxaq:
//Dost funksiyaların istifadə olunmasına aid missal
#include using namespace std; class myclass { int n,d; public: myclass(int i,int j){n=i;d=j;} //myclass sinfi üçün dost funksiyanın elan olunması
friend int factor(myclass ob); }; /*Burada dost funksiyanın təyin olunması nümayış etdirilmişdir. Əgər n d-yə qalıqsız bölünərsə bu funksiya “doğru”, əks halda “yalan” qiymət qaytarır. Qeyd edək ki, friend sözü factor funksiyasının təyinində istifadə olunmur:
int factor(myclass ob) { if(!(ob.n%ob.d))return 1; else return 0; } int main( ) {myclass ob1(10,2),ob2(13,3); if(factor(ob1)cout<<”10 2-yə qalıqsız bölünür\n”; else cout<<”10 2-yə qalıqsız bölünmür\n”; if(factor(ob2)cout<<”13 3-ə qalıqsız bölünür\n”; else cout<<”13 3-ə qalıqlı bölünür\n”; return 0; } Bu misalda myclass sinfinin təsvirində həm konstruktor, həm də factor( ) dost funksiyası elan olunmuşdur. factor funksiyası myclass sinfi üçün dost funksiya olduğuna görə bu funksiyadan sinfin qapalı elementlərinə müraciət etmək mümkündür. Ona görə də factor( ) funksiyasının daxilindən ob.n və ob.d obyektlərinə müraciət etmək olar. Dost funksiyalar sinfin üzvü olmadığına görə obyektin adından istifadə etməklə bu funksiyalara müraciət etmək olmaz. Məsələ, aşağıdaki yazılış doğru deyildir:
ob1.factor( ) //düz deyildir. Çünki factor sinfin üzvü deyildir.
Dost funksiyalara adi funksiyalar kimi müraciət edilməlidir.
Dost funksiyalar sinfin qapalı elementlərinə ancaq sinfin obyektləri vasitəsi ilə müraciət edə bilərlər. Beləliklə, myclass sinfinin üzv funksiyalarından fərqli olaraq dost funksiyalar n və d-dəyişənlərinə sinfin daxilində élan olunan obyekt vasitəsi ilə müraciət edə bilərlər. Məsələ, factor( ) funksiyası qapalı elementlərə ob-obyekti vasitəsi müraciət edir. Əgər factor( ) dost funksiya olmasa idi ob.d və ob.n obyektlərinə müraciət etmək olmazdı. Çünki n və d sinfin qapalı elementləridir.
Dost funksiyalar varisliyə malik deyildir. Əgər baza sinfi dost funksiyaya malikdirsə, onda bu funksiya varis sinfi üçün dost funksiya ola bilməz.