6.35.Funksiyalara müraciət zamanı qiymət və istinad parametrlərindən istifadə üsulları Proqramlaşdırma dillərinin çoxunda funksiyalara müraciətin iki üsulu vardır: qiymətə görə(qiymətlər prametri) və istinada görə (parametrlər istinadlar olduqda). Arqumentlər qiymətlər parametrinə görə ötürüldükdə funksiya daxilində onların sürətləri yaranır və arqumentin surətlərinin dəyişməsi onların əslinin dəyişməsinə səbəb olmur. Çoxlu sayda arqumentlərdən istifadə etdikdə yerinə yetirilmə vaxtı nöqteyi-nəzərdən bu üsul əlverişli hesab olunmur.
Funksiyalara müraciətdə istinad parametrlərindən istifadə etdikdə onların qiymətlərinin dəyişdirilməsi imkanı yaranır və həmçinin ötürülən qiymətlərə birbaşa müraciət etmək imkanı yaranır. İstinad parametri uyğun arqumentin psevdonimidir. İstinad parametrindən istifadə etmək üçün funksiyasının prototipində parametrin tipindən sonra &(ampersand) işarəsi qoymaq lazımdır. Bu işarəni funksiyanın başlığında da parametrlərin tipindən sonra qoyulur. Məsələ,
Inf & count-onu bildirir ki, “count int-tipli dəyişənə istinaddır”.
Funksiyaya müraciətdə dəyişənin adını göstərmək lazımdır, bu dəyişən istinada görə ötürülür.
Aşağıdaki proqramda həm qiymətə görə, həm də istinada görə funksiyalara müraciət edilir. Funksiyaların adları uyğun olaraq SquareByValue və SquareByReference-dır. Funksiyalara müraciətdə hər iki funksiyanın arqumentlərinin “stili” eynidir. Funksiyaların prototipləri bu arqumentləri fərqləndirir (qiymətə görə və ya istinada görə olan arqumentlər). Bu halda funksiyaların prototiplərinin yazılması vacibdir.
#include using namespace std; int SquareByValue(int); //funksiyaların prototipi void SquareByReference(int &); //funksiyanın prototipi
int main( ) { int x=2; int z=4; //SquareByValue-funksiyanın nümayışi
cout<<”x=”< cout<<”SquareByValue funksiyanın qaytardığı qiymət:” < cout<<”x=”< //SquareByReference-funksiyanın nümayışı cout<<”z=”< SquareByRefence(z); cout<<”z=”<<”SquareByRefence-dən sonraki qiymət”< return 0; } //müvəffəqiyyətlə yekunlaşdığını bildirir
//SquareByValue-funksiyası ədədin özünü özünə vurur və ədəddə saxlayır, yəni qiymət qaytarır.
int SquareByValue(int numer) {return numer*=numer;} //müraciət edərək funksiyanın arqumenti dəyişmir.
//SquareByValue f-sı m-i m-ə vurur, nəticə m-də qalır və m main //funksiyasına istinad edir.
void SquareByReference(int & m) {m*=m;} //müraciət edən funksiyanın arqumenti dəyişir
Nəticə aşağıdaki kimi olacaq:
x=2 SquareByValue-dən əvvəl
SquareByValue funksiyasının qaytardığı qiymət: 4
x=2 SquareByValue-dək sonraki qiymət.
z=4 SquareByReference-dən əvvəl
z=16 SquareByReference-dən sonraki qiymət.