Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Специфікатори глобальних змінних
В оголошеннях глобальних змінних можна використовувати тільки специфікатори static i extern. Ці специфікатори найчастіше застосовують при створенні багато файлових програм. Кожна глобальна змінна має бути визначена (тобто описана) тільки один раз, в разі багато файлових програм – в одному з файлів. Опис змінної пов’язаний з виділенням для неї оперативної пам'яті, обсяг якої визначається типом цієї змінної. Для глобальної змінної пам’ять виділяється в сегменті даних програми і заповнюється нулями, якщо в описі змінну не ініціалізують іншим значенням. В описах змінних зовнішнього рівня або взагалі не використовують специфікаторів, або вказують специфікатор static – в цьому випадку це означає, що областю дії даної змінної буде частина програми від опису змінної до кінця файлу. В інших файлах програми ця змінна недоступна, тому усувається загроза випадкової зміни її значення. Крім того, в інших файлах можна використовувати свої глобальні змінні з тим самим іменем, оскільки всі однойменні змінні з специфікатором static незалежні. Кожен програмний файл багато файлової програми може компілюватись автономно. Тому, щоб забезпечити можливість звертання до глобальних змінних, описаних в інших файлах, треба в даному файлі оголосити потрібні глобальні змінні ще раз з використанням специфікатора extern. Таке оголошення не пов’язане з виділенням пам'яті для змінних, отже змінні з специфікатором extern не можна ініціалізувати – вони є посиланнями на відповідні зовнішні змінні та роблять ці змінні видимими (оголошеними) в межах поточного файлу. Таким чином, кожен об’єкт програми повинен бути описаний тільки один раз, але може бути оголошений багаторазово. Найчастіше це стосується прототипів функцій і змінних з специфікатором extern. Для більшості змінних програми описи та оголошення збігаються. Багатофайлові програми В невеликих за розміром програмах функцію main і всі інші функції доцільно записувати в одному текстовому файлі. Якщо програма велика і складна, то доцільно поділити її на декілька програмних файлів, код кожного з яких можна створювати і компілювати автономно. У багато файлових програмах питання видимості постають у межах одного файлу та на меж файловому рівні. Встановлено такі правила:
1) об’єкти, оголошені на зовнішньому рівні (тобто між функціями), є частково глобальними, область їх дії – від точки оголошення до кінця програмного файлу; 2) щоб звернутись до глобальної змінної, описаної в іншому файлі, необхідно в поточному файлі оголосити цю змінну з специфікатором extern; 3) функції є глобальними об’єктами, тобто вони описуються тільки один раз, областю їх дії є вся програма; 4) прототипи функцій є частково видимими, вони діють в межах одного програмного файлу. Згідно з третім правилом кожна функція повинна бути описана тільки один раз в програмі у якомусь з файлів. Для звертання до функції з інших файлів або перед її описом у тому ж файлі треба попередньо вказати прототип функції. Областю дії прототипу функції є один програмний файл, тому в кожному файлі програми треба окремо оголошувати прототипи всіх необхідних функцій. Зазвичай створюють заголовний файл, в якому записують декларації шаблонів структурних типів і прототипи функцій і файл з розширенням срр, в якому функції описані повністю. Наприклад:
#include <iostream> #include "fibonachi.h" using namespace std; int main() { cout << fib(46); } // fibonachi.h #ifndef FIBONACHI #define FIBONACHI long fib(long n); #endif // fibonachi.cpp #include "fibonachi.h" static long knownf[ 47 ]; void init_fibo(void) { knownf[ 0 ]=0; knownf[ 1 ]=1; for(int i = 2; i < 47; i++) knownf[ i ] = -1; } long fib(long n) { static int num; if (++num == 1) init_fibo(); if (knownf[ n ]!= -1) return knownf[ n ]; else { knownf[ n ] = fib(n - 1) + fib(n - 2); return knownf[ n ]; } } Робота з файлами Звертання до файлів Для роботи з файлами необхідно підключити бібліотеку fstream. Файл, як і будь-яку іншу змінну, необхідно оголосити. Це можна зробити таким чином:
ofstream fn ("test.txt", ios::app);
Тут fn – змінна, за допомогою якої будуть виконуватись звертання до файлу з програми, test.txt – ім’я файлу на диску, ios::app – режим звертання до файлу. Існують такі режими звертання до файлу: ios::in – читання з файлу, для потоку ifstream встановлюється за замовчуванням, курсор встановлюється в початок файлу за замовчуванням; ios::out – запис поверх існуючої, для потоку ofstream встановлюється за замовчуванням, курсор встановлюється в початок файлу за замовчуванням; ios::ate – запис і зчитування, запис поверх існуючої, курсор встановлюється в початок файлу за замовчуванням; ios::app – запис, додавання в кінець файлу після існуючого запису.
Таким чином, команда з останнього приклада буде відкривати файл з іменем test.txt, який знаходиться в тому самому каталозі, що і програма. Файл відкривається для запису, якщо файл не існує – він буде створений. Для того, щоб відкрити файл як для зчитування, так і для запису, необхідно виконати таку команду:
ifstream fn ("test.txt", ios::in | ios::out);
Тут два аргумента ios::in і ios::out об’єднані за допомогою оператора |. Результат виконання цієї операції можна перевірити таким чином:
if (!fn) { cout << "Error opening file\n"; exit(1); }
В результаті виконання функції exit програма завершається. Аргумент цілого типу може приймати будь-яке значення, але традиційно вважають, що значенню аргументу 1 відповідає завершення програми через помилку, значенню аргумента 0 – нормальне завершення програми. Після використання файлу його необхідно закрити:
fn.close();
|
||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 34; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.181.81 (0.009 с.) |