Помогни ни да направим Uroci.net по - богат! Добави урок
Категории Други уроци Adobe Photoshop Adobe Illustrator Adobe Flash Adobe Fireworks DreamWeaver CSS и HTML Corel Draw Image Ready PHP SEO CMS Microsoft Windows Microsoft Word Microsoft Excel PowerPoint Microsoft Access Microsoft Publisher Linux Visual basic JavaScript Ajax 3ds Max Maya 3D C++
C++
Sound Forge Gimp SWiSH

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

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



4.4. Връщане на стойност

Типът на връщаната стойност на една функция може да бъде предварително дефиниран, дефиниран от потребителя или производен тип (такъв като указателен или съотнасящ тип). Следват няколко примера за такива типове

double sqrt( double );
char strcpy( char, const char* );
IntArray &Intarray qsort();
TreeNode *TreeNode inOrder();
void error(const char* ... );

Изключение представляват масивите и функциите, понеже те не могат да бъдат декларирани като типове за връщане на функция. Указател към масив или указател към функция, обаче, могат да бъдат декларирани като такива типове. Функция, която не връща стойност, трябва да бъде декларирана от тип void. Функция, за която явно не е дефиниран типа на връщаната стойност, по подразбиране се приема от тип int.

Следните две декларации на isEqual() са еквивалентни; и двете описват типа на връщаната от функцията стойност като int

int isEqual( long*, long* );
isEqual( long*, long* );

Операторът return прекратява изпълнението на текущата функция. Управлението на програмата буквално се връща към функцията, от която е била извикана току-що приключилата изпълнението си функция. Възможни са две форми на оператора return

return;
return expression;

Тази способност за проверка на типовете се счита за особено ценна, така че комисията ANSI за езика С е възприела прототипа на функция от С++ за езика ANSI С.

Операторът return не задължителен за функции, които са декларирани от тип void. Използува се обикновено за да предизвика прекратяване на изпълнението на функцията. (Този вид използване на оператора return съответствува на използването на оператора break в циклите). Едно неявно изпълнение на return се получава при достигане на последния оператор на функцията. Например,

void dCopy( double *scr, double *dst, int sz ) {
// copy scr array into dst
// simplifying assumption arrays are same size

if ( scr == 0 || dst == 0 ) // if either array is empty, quit
return;
if ( scr == dst ) // no need copy
return;
if( sz <= 0 ) // nothing to copy
return;
// still here@ copy.
for ( int i = 0; i < sz; ++i )
dst[ i ] = scr[ i ];
// no explicit return necessary
}

Втората форма на оператора return определя резултата на функцията. Той може да бъде произволен сложен израз; може да съдържа и обръщение към функция. Реализацията на функцията factorial(), например, съдържа следния оператор return

return val * factorial( val-1 );

Ако фактическата стойност, която се връща, не съответствува точно на типа за връщане, се прилага неявно конвертиране ако е възможно. Може да се каже, че по исторически причини не се счита за грешка факта, че една функция не декларира явно типа void, когато няма да връща стойност. Обаче, обикновено ще се появи предупреждение. main() е хубав пример за функция, която програмистът обикновено описва без оператор return. Програмистът трябва да бъде внимателен и непременно да добавя стойност за връщане във всяка точка на прекъсване на функцията. Например,

enum Boolean { FALSE, TRUE };
Boolean isEqual ( char *s1, char *s2 ) {
// if either are null, not equla

if ( s1 == 0 || s2 == 0 ) return FALSE; // if s1 == s2, return
// TRUE; else FALSE

if ( s1 == s2 ) // the same string
return TRUE;
while ( *s1 == *s2++ )

if (*s1++ == ‘�’ ) return TRUE;
// still here not equal
return FALSE;
}

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

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

- може да бъде върнат събирателен тип данни, който съдържа множество от стойности. За този тип използуване класовете са по-гъвкави от масивите. Освен това, програмистът може да върне само указател към масив; той може също да върне обект от тип клас, указател или псевдоним на клас.

- формалните аргументи могат да бъдат дефинирани като указателни или съответстващи типове. Те могат да бъдат дефинирани така, че да съдържат самите стойности. (Този метод се разглежда в раздел 4.6 по-нататък в тази глава).


Страници: «1 2 3 4 5 6 7 »

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

реклама

© Всички права запазени. 2006-2008. Created by: Site.bg
Препоръчваме: IT Новини | Кино и игри | Диплома.бг | Paparak.bg | Тунинг Портал | uchenik.com | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | AnimeS-bg.com | Фото Форум | Запознанства | Мрежа от приятели | IT Light | Spodeli.net | Фото-Култ | IDG.BG | Teenproblem.net | Блог - Образование | Fresh-BG.com | Hanovete.com | Bulfleet.com | Mythlands.com | Ohoboho.com | Казанлък.Com | News24 | Setcom.bg | Atol.bg | Elmaz.com | MobileBulgaria.com