Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Программа 3.2





Файл 1.cpp Файл 2.cpp
#include "stdafx.h" #include <iostream> //1 int fst = 1; //2 int snd = 3; //3 void printFst(); //4 void printSnd(); //5 void main(){ //6 std::cout<<"\n fst = "<<fst;//7 printFst(); //8 printSnd(); //9 getchar(); } //10   #include "stdafx.h" #include <iostream> //11 static int fst = 2; //12 extern int snd; //13 void printFst(){ //14 std::cout<<"\n fst = "<<fst;//15 } //16 void printSnd(){ //17 std::cout<<"\n snd = "<<snd;//18 } //19  

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

fst = 1

fst = 2

snd = 3

Текст программы размещён в двух файлах (модулях) 1.срр и 2.срр. В файле 1.срр в строках 2 и 3 определены две глобальные переменные fst и snd с внешним типом компоновки, которая даёт возможность доступа к этим переменным из другого модуля. Для того чтобы реализовать эту возможность, необходимо описать переменные в другом модуле так, как показано на примере переменной snd в строке 13 модуля 2.срр. В строке 12 модуля 2.срр определена глобальная переменная fst с внутренним типом компоновки, которая может быть доступна только в модуле 2.срр и никак не связана с переменной fst из строки 2. Таким образом, в программе определены три глобальные переменные, причём snd доступна в обоих модулях, а переменные fst только в том модуле, где они определены.

Сказанное подтверждается результатами выполнения программы. В функции main() сначала печатается переменная fst, определенная в модуле 1.срр, затем вызываются функции printFst() и printSnd(), определение которых размещено в модуле 2.срр. Функция printFst() выводит на экран значение переменной fst из второго модуля, а не из первого. Функция printSnd() выводит на экран значение переменной snd, которое стало доступно в нем благодаря описанию в строке 13.

Описание переменной во многом схоже по своей сути с описанием функции. Описаний одной и той же переменной в тексте программы может быть много, а определение должно быть только одно. Описание сообщает компилятору, что где-то в тексте программы есть определение переменной с таким-то именем и такого-то типа. Определение переменной отличается от описаний наличием в описании ключевого слова extern или наличием в определении явной инициализации переменной.

Необходимо помнить, что в программе нельзя определять переменные с одним именем, у которых совпадали бы тип, область существования, сфера действия, видимость и тип компоновки.

Всё вышесказанное относится не только к переменным основных типов данных, но и ко многим объектам (массивам, указателям, ссылкам, объектам типов, определенных пользователем и т.д.) языка Си++. Поэтому понимание этого материала особенно важно для дальнейшего изучения языка. Ниже дана таблица способов определения объектов и их свойств

 

Таблица 3.1

Объекты и их свойства

Способ определения объекта Вид объекта Свойства объекта
Определен вне блока Глобальный Статическая продолжительность существования. Область видимости - вся программа. Возможен либо внутренний, либо внешний тип компоновки. Класс памяти extern либо static
Определен в блоке со спецификатором static Локальный статический Статическая продолжительность существования. Область видимости с момента определения до конца блока. Возможен только внутренний тип компоновки. Класс памяти static
Определен в блоке, в описании функции или в списке формальных параметров функции Локальный автоматический Локальная продолжительность существования. Область видимости с момента определения до конца блока. Возможен только внутренний тип компоновки. Класс памяти auto либо register
Определен с помощью функции void*malloc(int) или оператора new. Уничтожен с помощью функции free(void*) или оператора delete Объект с динамической продолжительностью существования Существует с момента создания с помощью вызова функции malloc() или оператора new и до момента уничтожения с помощью вызова функции free() или оператора delete. Объект определяется внутри блока (тела функции), но при выходе за пределы блока не уничтожается так, как локальный статический объект. Программист должен обеспечить видимость объекта за пределами блока для того, чтобы, когда объект перестанет быть нужен, иметь возможность его уничтожить.

 

В таблице обобщён материал об определении и описании объектов и их свойств. Кроме того, в ней кратко дано описание объекта с динамической продолжительностью существования. Такие объекты подробно будут рассмотрены далее при изучении указателей.

 







Date: 2015-05-22; view: 578; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию