Сайфиев ж. Ф. С++ тилига кириш услубий қўлланма


Бир хил номли ҳар хил функциялар


Download 3.45 Mb.
bet32/79
Sana18.10.2023
Hajmi3.45 Mb.
#1707139
1   ...   28   29   30   31   32   33   34   35   ...   79
Bog'liq
cpp buxoro

Бир хил номли ҳар хил функциялар


С++ тилида бир номдаги бир нечта функцияларни тузиш имконияти мавжуддир. Бу бир хил номдаги хар хил функциялар дейилади. Қайта юкланувчи функциялар бир – бирлари билан параметрлари рўйхати билан фарқ қилиши лозим. Бунда параметрлар ёки турли сонда аниқланиши, ёки типлари билан фарқланиши керак. Қуйидаги мисолларни кўриб чиқамиз:
int myFunction( int, int )
int myFunction( long, long)
int myFunction( long )
myFunction() функцияси учта турли параметрлар рўйхати билан хар хил номда аниқланяпти. Функциянинг биринчи ва иккинчи версиялари параметрлар типи билан, учинчиси эса параметрлар сони билан фарқ қилаяпти.
Ушбу функцияларнинг қайтарадиган қийматларининг типлари бир хил ёки турлича бўлиши мумкин. Лекин, параметрлари рўйхати бир хил бўлган иккита функция турли типдаги қиймат қайтарадиган қилиб аниқланса дастурни компиляция қилиш жараёнида хатолик юз беради.
Функцияларни бир хил ном билан аниқланиши уларнинг полиморфизми деб ҳам аталади. Полиморфизм сўзи поли (гр. poly) - кўп, морфе (гр. morphё) - шакл cўзидан олинган бўлиб, кўпшакллилик деган маънони англатади.
Функциянинг полиморфизми деганда дастурда бир нечта турли вазифаларни бажарувчи бир хил номдаги функциялар бўлиши тушунилади. Параметрлари сони ва типини ўзгартириш орқали бир нечта бир хил номдаги функцияларни аниқлаш мумкин. Бундай ҳолда функцияни чақиришда ҳеч қандай ноаниқлик бўлмайди, керакли функция параметрига мувофиқ тарзда аниқланади.
Фараз қиламиз, сиз ихтиёрий берилган қийматни иккига кўпайтирадиган функция ёзмоқчисиз. Бу функцияга int, long, float ёки double типидаги қийматларни узатиш имконияти бўлишини ҳоҳладингиз. Бир хил номли хар хил функцияларсиз буни бажариш учун тўртта турли номдаги функцияларни ҳосил қилишингиз керак бўлади:
int DoubleInt(int);
long DoubleLong(long);
float DoubleFloat(float);
double DoubleDouble(double);
Бир хил номли функциялар ёрдамида эса уларни ўрнига ушбу функцияларни аниқлашимиз мумкин.
int Double(int);
long Double(long);
float Double (float);
double Double(Double);
Қайта юкланган функциялар чақирилганда компилятор айнан қайси вариантдаги функцияни ишлатиш кераклигини автоматик тарзда узатилаётган параметрларнинг типларига мувофиқ аниқлайди. Бир хил номли функцияларнинг аниқланиши 5.8.–листингда кўрсатилган.
5.8. – листинг. Функцияларнинг полиморфизми

  1. // 5.8. – Листинг. Функция полиморфизмига

  2. // мисол.

  1. #include

  1. int Double(int);

  2. long Double(long);

  3. float Double(float);

  4. double Double(double);

  5. int main()

  6. {

  7. int myInt = 6500;

  8. long myLong = 65000;

  9. float myFloat=6.5;

  10. double myDouble = 6.5 e20;

  11. int doubledInt;

  12. long doubledLong;

  13. float doubledFloat;

  14. double doubledDouble;

  15. cout<<”myInt: ”<< myInt<< “\n”;

  16. cout<<”myLong: ”<< myLong<< “\n”;

  17. cout<<”myFloat: ”<< myFloat<< “\n”;

  18. cout<<”myDouble: ”<< myDouble<< “\n”;

  19. doubledInt=Doubled(myInt);

  20. doubledLong=Doubled(myLong);

  21. doubledFloat=Doubled(myFloat);

  22. doubledDouble=Doubled(myDouble);

  23. cout<<”doubledInt:”<

  24. cout<<”doubledLong:”<

  25. cout<<”doubledFloat:”<

  26. cout<<”doubledDouble:”<

  27. “\n”;

  28. return 0;

  29. }

  30. int Double(int original)

  31. {

  32. cout<< “Double(int) funktsiyasi\n”;

  33. return 2*original;

  34. }

  35. long Double(long original)

  36. {

  37. cout<< “ Double(long) funktsiyasi \n”;

  38. return 2*original;

  39. }

  40. float Double(float original)

  41. {

  42. cout<< “Double(float) funktsiyasi \n”;

  43. return 2*original;

  44. }

  45. double Double(double original)

  46. {

  47. cout<< “Double(double) funktsiyasi\n”;

  48. return 2*original;

  49. }

НАТИЖА
MyInt: 6500
MyLong: 65000
MyFloat: 6.5
MyDouble: 6.5 e+20
Double(int) funktsiyasi
Double(long) funktsiyasi
Double(float) funktsiyasi
Double(double) funktsiyasi
DoubledInt: 13000
DoubledLong: 130000
DoubledFloat: 13
DoubledDouble: 13e+21

Download 3.45 Mb.

Do'stlaringiz bilan baham:
1   ...   28   29   30   31   32   33   34   35   ...   79




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling