main
ֆունկցիայի օրինակով արդեն տեսանք, որ C++ լեզվում ֆունկցիայի սահմանումն ունի չորս բաղադրիչ. i) վերադարձվող արժեքի տիպ, ii) անուն, iii) արգումենտների ցուցակ, iv) մարմին։ Օրինակ, եթե սահմանենք տրված շառավղով շրջանի մակերեսը հաշվող area
ֆունկցիան, ապա այն կունենա այսպիսի տեսք.
double area( double radius ) { return radius * radius * 3.14159265358979323846; }Այս ֆունկցիայի վերադարձվող արժեքի տիպը
double
է, անունը area
է, արգումենտների ցուցակում թվարկված է միակ radius
արգումենտը՝ իր տիպի հետ, իսկ մարմինը բաղկացած է միակ return
հրամանից, որի արգումենտում շրջանի մակերեսի հաշվման բանաձևն է։Ֆունկցիայի տիպ է կոչվում վերադարձրած արժեքի տիպի ու արգուենտների տիպերի ցուցակի համադրությունը։
Եթե հարկավոր է սահմանել մի ֆունկցիա, որից արժեք չենք ակնկալում, ապա պետք է վրա վերադարձվող արժեքի տիպը նշել որպես
void
։ Այսպիսի ֆունկցիային երբեմն անվանում են նաև պրոցեդուրա։ Օրինակ, սահմանենք մի ֆունկցիա, որը ստանում է առանց նշանի ամբողջ թիվ (unsigned int
) և արտածում է այդ թվի տասական, ութական ու տասնվեցական ներկայացումները։ Այդ ներկայացումները ստացվում են հոսքերի dec
, oct
և hex
մանիպուլյատորների օգնությամբ, որոնք սահմանված են iostream
ֆայլում։
void print_number( unsigned int num ) { std::cout << std::setw(8) << std::dec << num << std::setw(8) << std::oct << num << std::setw(8) << std::hex << num << std::endl; }Արտածման հոսքի
setw
պարամետրով մանիպուլյատորը, որ սահմանված է գրադարանի iomanip
ֆայլում, հնարավորություն է տալիս սահմանել այն դիրքերի քանակը, որոնք պետք է օգտագործվեն արժեքի արտածման համար։Եթե ֆունկցիան պետք է ստանա մի քանի արգումենտներ, ապա դրանք արգումենտների ցուցակում թվարկվում են իրարից ստորակետով անջատված։ Օրինակ, սահմանենք
avg3
ֆունկցիան, որը արգումենտում ստանում է երեք իրական թիվ և վերադարձնում դրանց թվաբանական միջինը։
double avg3( double a, double b, double c ) { auto sum = a + b + c; return sum / 3; }Եթե մի որևէ
f()
ֆունկցիայում օգտագործվելու է մի այլ g()
ֆունկցիա, ապա այն պետք է ավելի շուտ հայտարարված կամ սահմանված լինի։ Օրինակ, ծրագրում այդ երկու ֆունկցիաների փոխադարարձ դասավորությունը կարող է լինել այսպիսին.
int g( double a, char b ) { // ինչ-որ հրամաններ return 777; } void f( int x ) { // ինչ-որ հրամաններ auto v = g( 3.14, 'p' ); // ինչ-որ հրամաններ }Կամ,
f()
ֆունկցիային կարող է նախորդել միայն g()
ֆունկցիայի հայտարարությունը։ Ահա այսպես.
int g( double, char ); void f( int x ) { // ինչ-որ հրամաններ auto v = g( 3.14, 'p' ); // ինչ-որ հրամաններ } int g( double a, char b ) { // ինչ-որ հրամաններ return 777; }Առաջին տողում գրված արտահայտությունը կոմպիլյատորին տեղեկացնում է, որ գոյություն ունի
double
և char
տիպի արգումենտներ ստացող և int
արժեք վերադարձնող g
անունով ֆունկցիա, որի սահմանումը գալու է քիչ ավելի ուշ։
No comments:
Post a Comment