У С++ знято обмеження на розміщення описувачів. Як відомо, в ANSI С описувач може міститись у тілі будь-якого складеного оператора (причому синтаксично більшість компіляторів вимагають його розміщення на початку тіла складеного оператора). У С++ змінну можна описувати будь-де, навіть усередині оператора:
for(int i=1;i<5;i++);
Це дає можливість скоротити дистанцію між оголошенням змінної та її першою появою у функції. При цьому область дії змінної – від місця оголошення чи визначення до кінця блоку.
Перевантаження функцій
У найпростішому випадку перевантаження функцій полягає у використанні низки однойменних функцій, що відрізняються за сигнатурами. Компілятор допускає визначення однойменних функцій FuncName вигляду
<type1>FuncName(<type11>x1,<type12>x2,...,<type1N1>xN1)
{//тіло функції}
<type2>FuncName(<type21>x1,<type22>x2,...,<type2N2>xN2)
{//тіло функції}
<typeM>FuncName(<typeM1>x1,<typeM2>x2,...,<typeMNM>XNM)
{//тіло функції}
Тут typeIJ – певний тип даних, xIJ – ідентифікатори змінних, N1, N2,..., N М – кількості аргументів функцій. Наприклад:
|
|
Int Name (int first)
{return first*first;}
Int Name (unsigned first)
{return first*first;}
int Name (int first,char*second)
{return first*strlen(second);}
Main()
{printf ("%d\n",Name(4));
printf ("%d\n";(unsigned)4);
printf ("%d\n",Name(4,"abc");}
Зазначимо, що в означення сигнатури не входить тип результату, який повертається функцією. Якщо до розглянутої вище послідовності функцій додати визначення, наприклад
Float Name(int first)
{return first*first;},
то буде видане повідомлення про помилку на етапі компіляції.