Помогни ни да направим Uroci.net по - богат! Добави урок

C++ част.4 (Функции и обхват)

C++ » C++
fix3d   трудност:    видян: 42358


Глава 4: Функции и обхват.

Съдържание на четвърта глава :
4.1. Рекурсия
4.2. Функции inline
4.3. Строга проверка на типовете
4.4. Връщане на стойност
4.5. Списък от аргументи на функция
4.6. Изпращане на аргументи
4.7. Аргумент - псевдоним (reference)
4.8. Аргумент - масив
4.9. Програмен обхват
4.10. Локален обхват


За функциите може да се мисли като за потребителско дефинирани операции. Най-общо казано функцията се представя чрез име, а не чрез оператор. Операндите на функцията, наречени нейни аргументи, се задават от затворен в скоби списък от аргументи, разделени чрез запетаи. Резултатът на функцията се нарича нейн тип за връщане. Функция, която не връща стойност, има тип за връщане void.

Фактическите действия, които реализира една функция, са описани в тялото й. Тялото на функцията се затваря във фигурни скоби (“{}”) и понякога се нарича блок. Ето няколко примера за функции

intline int abs( int i ) { // return the absolute value of i
return( i < 0 ? -i; i );
}

inline int min( int v1, int v2 ) { // return the smaller of two values
return ( v1 < v2 ? v1 ; v2 );
}

gcd( int v1, int v2 ) {
// return greatest common denominator
int temp;
while ( v2 ) {
temp = v2;
v2 = v1 % v2;
v1 = temp;
}
return v1;
}

Една функция се изпълнява, когато към името й се приложи операторът за извикване на функция ("()"). Ако функцията очаква да получи аргументи, тези аргументи, наречени фактически аргументи на извикването, се поставят в оператора за извикване на функция. Аргументите се отделят със запетаи. Това се нарича изпращане на аргументи на функция. В следващия пример main() извиква abs() два пъти, min() и gcd() по веднъж. Тя е описана във файла main.C.

#include <stream.h>
#include "localMath.h"

main(){
int i, j;
cout << "Value "; // get value from standart input
cin >> i;
cout << "Value ";
cin >> j;
cout << "nmin " << min( i, j ) << "n";
i = abs( i );
j = abs( i );
cout << "gcd " << gcd( i, j ) << "n";
}

При обръщение към функция се извършва едно от две възможни действия. Ако функцията е била декларирана като inline, по време на компилация в точката на обръщение се извършва заместване на обръщението с тялото на функцията; иначе функцията се извиква по време на изпълнение. Обръщението към функция предизвиква предаване на управлението на извиканата функция изпълнението на текущата активна функция се преустановява. Когато приключи изчислението на извиканата функция прекъснатата функция продължава изпълнението си от точката, непосредствено следваща повикването. Управлението на извикването на функции се осъществява с помощта на програмния стек, създаван по време на изпълнение.

Ако някаква функция не е декларирана в програмата преди да бъде използувана се получава грешка по време на компилация.

Дефиницията на функция, разбира се, служи и за нейна декларация. Обаче, дадена функция може да бъде дефинирана само веднъж в програмата. Обикновено дефиницията се разполага в собствен текстов файл, където заедно с нея могат да се съдържат и други свързани функции. Най-често функциите се използват от програми, записани във файлове, не съдържащи техните дефиниции. Следователно е необходим допълнителен метод за деклариране на функции.

Декларацията на една функция се състои от типа за връщане, име и списък от аргументи. Тези три елемента се наричат прототип на функция. Прототипът на някоя функция може да се явява многократно в даден файл безнаказано.

За да бъде компилирана main. C функциите abs(), min() и gcd() трябва първо да бъдат декларирани; иначе всяко от повикванията им в тялото на main() ще предизвика грешка по време на компилация.

Трите прототипа имат вида (не е необходимо да се задават имената на имената на аргументите, а само типа им)

int abs( int );
int min( int, int );
int gcd( int, int );

Наи-добре е прототипите на функциите (и дефинициите на функциите online) да се поместват в заглавни файлове. В последствие тези заглавни файлове могат да бъдат включвани навсякъде, където те са необходими. По този начин всички файлове делят една обща декларация; ако тази декларация трябва да бъде променена се коригира само един файл.

Заглавният файл може да бъде наречен localMath.h. Той може да има следния вид (inline функциите са дефинирани в заглавния файл, а не в текстов файл на програмата)

int gcd( int, int );// inlines are placed within header file
inline abs( int i) {
return( i<0 ? -i ; i ); }
inline min( int v1, int v2) {
return( v1 <= v2 ? v1 ; v2 ); }

Компилацията на програмата се извършва по следния начин $ CC main. C gcd.C
След изпълнение на програмата се получават следните резултати

Value 15
Value 123
min 15
gcd 3



Страници: 1 2 3 4 »

Сподели урока:



Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини