Vi fəsil. C++ dilində proqramlaşdırma


Funksiyaların yenidən yüklənməsi



Yüklə 1,02 Mb.
səhifə30/74
tarix04.01.2023
ölçüsü1,02 Mb.
#121980
1   ...   26   27   28   29   30   31   32   33   ...   74
Alqoritmik dillər(C kitab) (10)

6.24.Funksiyaların yenidən yüklənməsi
Funksiyanın yenidən yüklənməsi mexanizmi poliformizm (bir interfeys, çoxlu metodlar) prinsipinə əsaslanır. C++ dilində iki və daha çox funksiyalar eyni ada malik ola bilərlər. Onlar bir-birindən tiplərinə və arqumentlərinin sayına görə fərqlənə bilərlər. Əgər iki və daha çox funksiyalar eyni bir ada malikdirsə, onda deyirlər ki, onlar yenidən yüklənmişdir. Yüklənmiş funksiyalar proqramın sadələşdirilməsinə imkan verir və bir-birinə yaxın olan əməliyyatların yerinə yetirilməsi üçün eyni bir ada müraciət edilməsini mümkün edir. Funksiyanın yüklənməsi zamanı bütün mümkün variantlar təyin edilməlidir. Funksiyaya müraciət zamanı kompilyator funksiyanın tipini və arqumentlərin sayını avtomatik olaraq götürür. Məlumdur ki, C dilində yerinə yetirdiyi əməliyyatlara görə bir-birinə yaxın olan və yalnız tiplərinə görə fərqlənən funksiyalar vardır. Məsələ, C dilinin kitabxanasında abs( ), labs( ), fabs( ) funnksiyaları vardır ki, onlar uyğun olaraq tam ədədlərin, uzun tam ədədlərin və sürüşkən nöqtəli ədədlərin mütləq qiymətlərini hesablayır. Ona görə də üç tip verilən üçün üç funksiya tələb olunur ki, bu isə proqram tərtibini bir qədər mürəkkəbləşdirir. Bütün hallarda tiplərinə görə fərqlənən ədədlərin mütləq qiymətləri qaytarılır. C++ dilində bu halı aradan qaldırmaq üçün funksiyaların yenidən yüklənməsi üsulundan istifadə etməklə hər üç tip üçün funksiyalara bir ad vermək olar. Aşağıdaki misalda funksiyaların yüklənməsi nümayiş etdirilmişdir.
#include
using namespace std;
//üç üsulla abs( )-funksiyasının yüklənməsi
int abs(int n);
long abs(long n);
double abs(double n);
int main ( )
{
cout <<”-10-un mütləq qiyməti:”<
cout <<”-10L-ın mütləq qiyməti:” << abs(-10L)<<”\n”;
cout <<”-10.01-in mütləq qiyməti:” <
return 0;
}

//tam ədədlər üçün abs( )
int abs(int n){
cout <<”tam ədəd üçün abs( )\n”;
return n<0?-n:n;
}

//uzun tam ədəd üçün abs( )
long abs(long n){
cout <<”uzun tam ədəd üçün abs( )\n”;

return n<0?-n; n;}

//ikiqat dəqiqlə olan həqiqi ədədi üçün abs( )
double abs(double n)
{
cout <<”həqiqi ədəd üçün abs( ) \ n”;
return n<0?-n: n;
}
Göründüyü kimi, proqramda müxtəlif tipli verilənə malik olan abs( )-adlı üç funksiya təyin edilmişdir. main funksiyasının daxilində abs( )–funksiyasına müxtəlif tipli üç arqumentlə müraciət edilir. Kompilyator düzgün varianta avtomatik olaraq müraciət edir. Proqramın işləməsi nəticəsində ekrana aşağıdakılar veriləcəkdir:
tam ədəd üçün abs( )
-10-un mütləq qiyməti: 10
uzun tam ədədi üçün abs( )
-10L-in mütləq qiyməti: 10
həqiqi ədəd üçün abs( )
-10.01-in mütləq qiyməti: 10.01

Bu sadə proqramda funksiyaların yüklənməsinin əhəmiyyətliliyi nümayiş etdirilmişdir. Bu halda abs( ), labs( ),fabs( )- kimi üç adın işlənməsi aradan qaldırıldı və ancaq bir addan-abs( )-adından istifadə edildi. Funksiyaya müraciət zamanı düzgün variantın seçilməsi məsələsini kompilyator həll edir.


Baxdığımız misalda yüklənən funksiyalar bir birindən tiplərinə görə fərqlənirdilər. Yüklənən funksiyalar arqumentlərinin sayına görə də fərqlənə bilərlər. Aşağıdaki misala baxaq:

#include
using namespace std;
void f1(int a);
int f1(int a; int b);
int main( )
{
f1(10);
f1(10, 20);
return 0;
}
void f1(int a)
{
cout <<”f1(int a)-ya müraciət\n”;
}
void f1(int a, int b)
{
cout <<”f1(int a, int b)-yə müraciət \n”;
}
Funksiyanın qaytardığı qiymətin tipi onun yenidən yüklənməsi üçün kafi deyildir. Əgər iki funksiya qaytardığı qiymətlərin tipinə görə fərqlənirlərsə, onda kompilyator funksiyalara müraciət zamanı hansının seçilməsi məsələsini həll edə bilmir.

Yüklə 1,02 Mb.

Dostları ilə paylaş:
1   ...   26   27   28   29   30   31   32   33   ...   74




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin