C ++

Сфера застосування в C ++

Сфера застосування в C ++
Сутність в C ++ має ім'я, яке можна оголосити та / або визначити. Декларація є визначенням, але визначення не обов'язково є декларацією. Визначення виділяє пам’ять для іменованої сутності, але декларація може виділяти пам’ять для іменованої сутності. Декларативний регіон - це найбільша частина програми, в якій дійсне ім'я сутності (змінної). Цей регіон називається сферою дії або потенційною сферою. У цій статті пояснюється область застосування в C++. Крім того, для розуміння цієї статті необхідні базові знання на C ++.

Зміст статті

Декларативний регіон та сфера застосування

Декларативний регіон - це найбільша частина тексту програми, в якій дійсне ім'я сутності. Це регіон, в якому некваліфіковане ім’я може бути використано (видно) для позначення тієї самої сутності. Розглянемо таку коротку програму:

#включати
використання простору імен std;
void fn ()

int var = 3;
якщо (1 == 1)

кут<

int main ()

fn ();
повернути 0;

Функція fn () має два блоки: внутрішній блок для умови if і зовнішній блок для тіла функції. Ідентифікатор, var, вводиться і видно у зовнішньому блоці. Це також видно у внутрішньому блоці, із заявою cout. Зовнішній та внутрішній блоки є сферою дії для імені, var.

Однак ім'я, var, все ще може використовуватися для оголошення іншої сутності, такої як float у внутрішньому блоці. Наступний код ілюструє це:

#включати
використання простору імен std;
void fn ()

int var = 3;
якщо (1 == 1)

float var = 7.5;
кут<

int main ()

fn ();
повернути 0;

Вихід 7.5. У цьому випадку ім'я var більше не може використовуватися у внутрішньому блоці для посилання на ціле число значення 3, яке було введено (оголошено) у зовнішньому блоці. Такі внутрішні блоки називаються потенційною сферою для об'єктів, оголошених у зовнішньому блоці.

Примітка: Сутність того самого типу, як і зовнішній блок, все ще може бути оголошена у внутрішньому блоці. Однак у цьому випадку дійсним у внутрішньому блоці є нова декларація та її значення, тоді як стара декларація та її значення поза внутрішнім блоком залишаються дійсними у зовнішньому блоці.

Оголошення з тим самим іменем у внутрішньому блоці зазвичай замінює декларацію з тим самим іменем поза цим внутрішнім блоком. Внутрішні блоки можуть вкладати інші внутрішні блоки.

Глобальний обсяг

Коли програміст просто починає вводити файл, це загальний обсяг. Наступна коротка програма це ілюструє:

#включати
використання простору імен std;
float var = 9.4;
int main ()

кут <кут <<::var<<'\n';
повернути 0;

Результат:
9.4
9.4

У цьому випадку декларативна область або область дії для var починається з точки декларації для var, продовжується вниз до кінця файлу (одиниця перекладу).

Блок функції main () має інший обсяг; це вкладена область для глобальної області. Для доступу до сутності глобальної області дії з іншої області застосування ідентифікатор використовується безпосередньо або перед оператором дозволу області дії: .

Примітка: Сутність, main (), також оголошена в глобальній області.

Блок Сфера

Оператор if, while, do, for або switch може кожен визначити блок. Таке твердження є складним твердженням. Ім'я змінної, оголошеної в блоці, має область дії блоку. Його область дії починається з моменту декларації і закінчується в кінці блоку. Наступна коротка програма ілюструє це для змінної ident:

#включати
використання простору імен std;
int main ()

якщо (1 == 1)

/ * деякі твердження * /
int ident = 5;
кут</ * деякі твердження * /

повернути 0;

Змінна, така як ident, оголошена в області блоку, є локальною змінною.

Змінна, оголошена поза сферою дії блоку та вище, може бути видно в заголовку блоку (наприклад,.g., умова для if-block), а також всередині блоку. Наступна коротка програма ілюструє це для змінної ідентифікатор:

#включати
використання простору імен std;
int main ()

int ідентифікатор = 8;
якщо (ідентифікатор == 8)

кут<
повернути 0;

Вихід 8. Тут є два обсяги блоків: блок для функції main () та вкладений оператор if-складання. Вкладений блок - це потенційна область функціонального блоку main ().

Декларація, введена в область блоку, не може бути видно за межами блоку. Наступна коротка програма, яка не компілюється, ілюструє це змінною variab:

#включати
використання простору імен std;
int main ()

якщо (1 == 1)

int variab = 15;

кут<повернути 0;

Компілятор видає повідомлення про помилку для variab.

Введена сутність, оголошена в заголовку складеної функції, не може бути видно за межами (нижче) складеного оператора. Наступний код циклу for не буде скомпільований, що призведе до повідомлення про помилку:

#включати
використання простору імен std;
int main ()

для (int i = 0; i<4; ++i)

кут<
кут<повернути 0;

Змінна ітерації i видно всередині блоку for-loop, але не поза блоком for-loop.

Сфера функцій

Параметр функції видно у блоці функцій. Сутність, оголошена у функціональному блоці, видно з точки оголошення до кінця функціонального блоку. Наступна коротка програма це ілюструє:

#включати
#включати
використання простору імен std;
рядок fn (рядок str)

char stri [] = "банани";
/ * інші твердження * /
рядок totalStr = str + stri;
повернути totalStr;

int main ()

рядок totStr = fn ("їдять");
кут<повернути 0;

Результат:
їдять банани

Примітка: Сутність, оголошену поза функцією (над нею), можна побачити у списку параметрів функції, а також у функціональному блоці.

Етикетка

Сфера дії мітки - це функція, в якій вона відображається. Наступний код ілюструє це:

#включати
використання простору імен std;
void fn ()

перейти до labl;
/ * інші твердження * /
ярлик: int inte = 2;
кут<
int main ()

fn ();
повернути 0;

Вихід 2.

Обсяг перерахування

Нескопійоване перерахування
Розглянемо наступний if-block:

якщо (1 == 1)

перелічити a, b, c = b + 2;
кут<

Вихід - 0 1 3.

Перший рядок у блоці - це перерахування, a, b і c - його перечислювачі. Обсяг перечислювача починається з точки оголошення до кінця блоку, що включає перерахування.

Наступне твердження не буде скомпільовано, оскільки точка оголошення c стоїть після точки a:

перелічити a = c + 2, b, c;

Наступний сегмент коду не буде скомпільований, оскільки перелічувачі отримують доступ після блоку перерахування, що включає:

якщо (1 == 1)

перелічити a, b, c = b + 2;

кут<Вищезазначене перерахування описується як неконтрольоване перерахування, а його перечислювачі - як нескорожене перерахування. Це тому, що воно починається лише із зарезервованого слова enum. Перерахування, які починаються з класу переліку або структури перечислення, описуються як перелічення з масштабом. Їх переписувачі описуються як перелічувачі з масштабом.

Обсяг переліку
Наступне твердження є нормальним:

клас перелічення nam a, b, c = b + 2;

Це приклад переліку з масштабом. Назва класу - nam. Тут область дії перечислювача починається з точки оголошення до кінця визначення переліку, а не до кінця блоку, що включає перерахування. Наступний код не компілюється:

якщо (1 == 1)

клас перелічення nam a, b, c = b + 2;
кут<

Сфера застосування класу

За звичайного масштабування декларативна область починається з точки, потім продовжується і зупиняється в іншій точці. Сфера дії існує в одному суцільному регіоні. З класом область дії сутності може бути в різних регіонах, які не об’єднані. Правила для вкладених блоків все ще застосовуються. Наступна програма це ілюструє:

#включати
використання простору імен std;
// Базовий клас
клас Кла

приватний:
int memP = 5;
захищений:
int memPro = 9;
публічний:
void fn ()

кут<
;
// Похідний клас
клас DerCla: публічна Cla

публічний:
int derMem = memPro;
;
int main ()

Cla obj;
obj.fn ();
DerCla derObj;
кут<повернути 0;

Результат:
5
9

У класі Cla змінна memP видно в точці оголошення. Після цього коротка частина "protected" пропускається, а потім знову відображається у функціональному блоці члена класу. Похідний клас пропускається, а потім знову бачиться в області функції main () (блок).

У класі Cla змінну memPro видно в точці оголошення. Частина загальнодоступної функції fn () пропускається, а потім відображається в блоці опису похідного класу. Це знову видно вниз у функції main ().

Оператор дозволу сфери дії
Оператор роздільної здатності в C ++: . Він використовується для доступу до статичного члена класу. Наступна програма це ілюструє:

#включати
використання простору імен std;
клас Кла

публічний:
статичний int const mem = 5;
публічний:
статична порожнеча fn ()

кут<
;
int main ()

кут<Cla :: fn ();
повернути 0;

Результат:
5
5

Статичні члени видно у функціональному блоці main (), доступ до яких здійснюється за допомогою оператора роздільної здатності.

Область застосування параметра шаблону

Звичайний обсяг імені параметра шаблону починається з точки оголошення до кінця його блоку, як у наступному коді:

шаблон Структурні Віки

T Джон = 11;
U Петро = 12.3;
Т Марія = 13;
U Радість = 14.6;
;

U і T видно всередині блоку.

Для прототипу функції шаблону область починається з точки оголошення до кінця списку параметрів функції, як у наступному твердженні:

шаблон void func (T no, U cha, const char * str);

Однак, коли справа стосується опису класу (визначення), область дії також може мати різні частини, як у наступному коді:

#включати
використання простору імен std;
шаблон клас TheCla

публічний:
T номер;
статичний U ch;
void func (U cha, const char * str)

кут << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

статична порожня забава (U ch)

якщо (ch == 'a')
кут << "Official static member function" << '\n';

;
int main ()

TheCla obj;
obj.число = 12;
obj.func ('$', "500");
повернути 0;

Приховування імені

Приклад приховування імен виникає, коли ім'я того самого типу об'єкта повторно оголошується у вкладеному блоці. Наступна програма це ілюструє:

#включати
використання простору імен std;
void fn ()

int var = 3;
якщо (1 == 1)

int var = 4;
кут<
кут<
int main ()

fn ();
повернути 0;

Результат:
4
3

Це тому, що var у вкладеному блоці сховав var у зовнішньому блоці.

Можливість повторення декларації в тому ж обсязі

Суть декларації полягає в тому, де ім’я (вперше) вводиться у сферу дії.

Прототип функції
Різні сутності, навіть різних типів, зазвичай не можуть бути оголошені в одному і тому ж обсязі. Однак прототип функції може бути оголошений більше одного разу в одному і тому ж обсязі. Наступна програма з двома прототипами функцій та відповідним визначенням функції це ілюструє:

#включати
використання простору імен std;
void fn (int num);
void fn (int num);
void fn (int num)

кут<
int main ()

fn (5);
повернути 0;

Програма працює.

Перевантажені функції
Перевантажені функції - це функції з однаковим іменем, але різними підписами функцій. Як ще один виняток, перевантажені функції з однаковим іменем можна визначити в одному і тому ж обсязі. Наступна програма це ілюструє:

#включати
використання простору імен std;
void fn (int num)

кут<
void fn (float no)

кут<
int main ()

fn (5);
float flt = 8.7;
fn (flt);
повернути 0;

Результат:
5
8.7

Перевантажені функції були визначені в глобальній області.

Сфера простору імен

Область простору імен заслуговує на власну статтю. Зазначена стаття написана для цього веб-сайту, linuxhint.ком. Просто введіть пошукові слова «Область простору імен» у вікні пошуку цього сайту (сторінки) та натисніть кнопку «ОК», і ви отримаєте статтю.

Обсяг у різних порціях

Клас - це не єдина схема, коли область дії може бути різними порціями. Специфікатор друзів, певне використання розробленого специфікатора типу та директиви use - це інші схеми, де область дії знаходиться в різних місцях - детальніше див. Далі.

Висновок

Область застосування - це декларативний регіон. Декларативний регіон - це найбільша частина тексту програми, в якій дійсне ім'я сутності. Його можна розділити на більше ніж одну частину відповідно до певних схем програмування, таких як вкладені блоки. Частини, які не мають пункту декларування, формують потенційний обсяг. Потенційний обсяг може мати та не мати декларацію.

Кращі ігри командного рядка для Linux
Командний рядок - це не просто ваш найбільший союзник при використанні Linux, він також може бути джерелом розваг, оскільки ви можете використовувати ...
Кращі програми для картографування геймпадів для Linux
Якщо ви любите грати в ігри на Linux із геймпадом замість типової системи введення клавіатури та миші, є кілька корисних програм для вас. Багато ігор ...
Корисні інструменти для геймерів Linux
Якщо ви любите грати в ігри на Linux, швидше за все, ви, можливо, використовували додатки та утиліти, такі як Wine, Lutris та OBS Studio, щоб покращит...