Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

7.4.1. Коментарі

Як відомо, коментарі в базовій С задаються за допомогою комбінації символів /*–*/:

/*текст коментаря*/.

У С++ для задання коментарів може використовуватись подвійний слеш: //текст коментаря.

Подвійний слеш ставиться на початку кожного рядка, який буде коментарем. У кінці коментаря (коментованого рядка) ставиться символ переведення рядка. Усередині тексту коментаря допускаються будь-які символи (включаючи //).

7.4.2. Прототипи функцій

Прототип функції – це ім'я функції та її сигнатура (список типів параметрів):

returnType functionName (type1 par1, type2 par2,..., typeN parN);

Як відомо, в ANSI С функцію можна оголошувати без сигнатури:

int f();

При цьому компілятор не перевіряє відповiдність типів і кількості параметрів при виклику функції. Якщо при виклику функції параметри не відповідають типам (напр., розміщені не в тому порядку) чи вказана невірна їх кількість, то компілятор не помітить помилки. Вона може виявитись на етапі виконання програми. Тому в С++ рекомендується використовувати повні прототипи функцій при оголошенні. Якщо, наприклад, у С функція f оголошується так (старий стиль):

Void f();

то в С++:

void f(void);

При використанні старого стилю оголошення функцій С++ компілятор буде видавати попередження. Тому при компілюванні файла, де використовуються фрагменти з ANSI C, необхідно встановлювати відповідну опцію компіляції.

7.4.3. Операція розширення області видимості

Операція розширення області видимості синтаксично позначається як подвійна двокрапка (::).

У С++ використовується у двох основних випадках:

а) для доступу до змінних, які невидимі в даній області видимості;

б) при визначенні функцій-членів класу за межами формального опису класу.

Розглянемо детальніше випадок а). Нехай ми маємо такий фрагмент програми:

#include <stdio.h>

float r=2.6;

int increment(int k)

{int r=k+16;

printf("у функцiї increment r=%d\n",r);

printf("значення ззовнi increment r=%0.2f\n",::r);

return r;

}

void main(void)

{

int r=increment(20);

printf("у функцiї main r=%d\n",r);

printf("значення ззовнi main r=%0.2f\n",::r);

}

Результати роботи програми:

у функцiї increment r=36

значення ззовнi increment r=2.60

у функцiї main r=36

значення ззовнi main r=2.60

7.4.4. Оголошення в операторах

У С++ знято обмеження на розміщення описувачів. Як відомо, в ANSI С описувач може міститись у тілі будь-якого складеного оператора (причому синтаксично більшість компіляторів вимагають його розміщення на початку тіла складеного оператора). У С++ змінну можна описувати будь-де, навіть усередині оператора:

for(int i=1;i<5;i++);

Це дає можливість скоротити дистанцію між оголошенням змінної та її першою появою у функції. При цьому область дії змінної – від місця оголошення чи визначення до кінця блоку.

7.4.5. Перевантаження функцій

У найпростішому випадку перевантаження функцій полягає у використанні низки однойменних функцій, що відрізняються за сигнатурами. Компілятор допускає визначення однойменних функцій 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М – кількості аргументів функцій. Наприклад: