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

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

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



4.3. Строга проверка на типовете

Функцията gcd() очаква два аргумента от тип int. Какво ще се случи ако й бъдат подадени аргументи от тип float или char*? Какво ще се случи ако се изпрати само един аргумент или повече от два?

Основните операции, които gcd() изпълнява над двата си аргумента са от модулната аритметика. Модулната аритметика не може да се прилага за не цели операнди. Следователно обръщението

gcd( 3.14, 6.29 );

вероятно ще предизвика грешка по време на изпълнение. Вероятно най-неприятно би било функцията да върне някакъв невалиден резултат (неприятно, защото този резултат може да остане незабелязан или ако бъде търсен, да създаде трудности при трасиране). Какъв би могъл да бъде резултата на следното обръщение?

gcd( "hello", "world" );

Или от случайното слепване на двете стойности в това обръщение?

gcd( 24312 );

Единственият желателен резултат от опита за компилиране на по-ранните две обръщения за gcd() е да бъде предизвикана грешка по време на компилация; не се препоръчва какъвто и да е опит за изпълнението им. В С++ тези две обръщения наистина водят до съобщения за грешки по време на компилация, които най-общо имат следната форма

gcd( "hello", "world" ); //error invalid argument
//types (char*, char*)// -expecting (int, int)
gcd( 24312 );//error missing value for argument two

Какво се случва, когато в обръщението участвуват два аргумента от тип double? Отбелязването на това обръщение като свързана с типовете грешка е правилно, но може би много строго. По-скоро аргументите може неявно да бъдат конвертирани към int, като така се задоволят изискванията на списъка от аргументи. Понеже това е стесняващо конвертиране ще появи предупреждение. Обръщението добива вида

gcd( 3, 6 );
и връща стойност 3.

С++ е строго типизиран език. По време на компилация се прави проверка за съответствието на типовете както на списъка от аргументи, така и на типа на резултата на извиканата функция. Ако бъде открито несъответствие между фактическите типове и типовете, декларирани в прототипа на функцията, ще бъде приложено неявно конвертиране ако това е възможно. Ако не е възможно неявно конвертиране или е неправилен броя на аргументите ще се получи грешка по време на компилация. Прототипът на функцията предлага на компилатора информация за типовете, която му е необходима при проверката на типовете. Това е причината една функция да не може да бъде викана преди да бъде декларирана.(ў)


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

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



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


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