Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП 2012.doc
Скачиваний:
30
Добавлен:
24.09.2019
Размер:
300.54 Кб
Скачать

14) Параметры-функции.

int (*ptr)(int,int); объявляется указатель на функцию

а в процессе программы указателю уже присваивается какая-нибудь функция

switch (c) { case '+': ptr=add; c='-';break;

case '-': ptr=sub; c='*';break;

case '*': ptr=mul; c='/';break;

case '/': ptr=div; c=' '; }

15) Правила, определяющие видимость переменных в функциях.

Видимость переменных и функций в программе определяется следующими правилами.

1. Переменная, объявленная или определенная глобально, видима от точки объявления или определения до конца исходного файла. Можно сделать переменную видимой и в других исходных файлах, для чего в этих файлах следует ее объявить с классом памяти extern.

2. Переменная, объявленная или определенная локально, видима от точки объявления или определения до конца текущего блока. Такая переменная называется локальной.

3. Переменные из объемлющих блоков, включая переменные объявленные на глобальном уровне, видимы во внутренних блоках. Эту видимость называют вложенной. Если переменная, объявленная внутри блока, имеет то же имя, что и переменная, объявленная в объемлющем блоке, то это разные переменные, и переменная из объемлющего блока во внутреннем блоке будет невидимой.

4. Функции с классом памяти static видимы только в исходном файле, в котором они определены. Всякие другие функции видимы во всей программе.

16) Пространства имен.

Большинство приложений состоит более чем из одного исходного файла. При этом возникает вероятность дублирования имен, что препятствует сборке программы из частей. Для снятия проблемы в C++ был введен механизм логического разделения области глобальных имен программы, который получил название пространства имен.

Имена, определенные в пространстве имен, становятся локальными внутри него и могут использоваться независимо от имен, определенных в других пространствах. Таким образом, снимается требование уникальности имен программы.

namespaсe [<имя>] { <Объявления и определения> }

Имя пространства имен должно быть уникальным, но может быть и опущено. Если имя пространства опущено, то считается, что определено неименованное пространство имен, локальное внутри единицы трансляции. Для доступа к его ресурсам используется внутреннее имя $$$.

Например:

namespace ALPHA { // ALPHA – имя пространства имен

long double LD; // объявление переменной

float f(float y) { return y; } // описание функции

}

Пространство имен определяет область видимости, следовательно, функции, определенные в пространстве имен могут без ограничений использовать другие ресурсы, объявленные там же (переменные, типы и т.д.).

Доступ к элементам других пространств имен может осуществляться тремя способами:

1) с использованием квалификатора доступа, например:

ALPHA::LD или ALPHA::f()

2) с использованием объявления using, которое указывает, что некоторое имя доступно в другом пространстве имен:

namespace BETA { …

using ALPHA::LD;/* имя ALPHA::LD доступно в BETA*/ }

3) с использованием директивы using, которая объявляет все имена одного пространства имен доступными в другом пространстве:

namespace BETA { …

using ALPHA; /* все имена ALPHA доступны в BETA*/ }

Непоименованное пространство имен невидимо в других модулях: namespace { namespace-body }

При трансляции оно именуется как “unique”, доступное в самом модуле:

namespace unique { namespace-body }

using namespace unique;

17) Компоновка модулей С++. Защита от повторной компиляции.

Модули С++

Модуль C++ обычно включает два файла: заголовочный файл с расширением ≪.h≫ и файл реализации с расширением ≪.cpp≫.

Заголовочный файл играет роль интерфейсной секции модуля. В него помещают объявление экспортируемых ресурсов модуля:

· прототипы (заголовки) процедур и функций,

· объявление переменных, типов и констант.

Заголовочный файл подключают командой #include ″<Имя модуля>.h″, записываемой в файле реализации программы или другого модуля, если они используют ресурсы описываемого модуля.

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

функций, а также объявление внутренних ресурсов модуля. Файл реализации подключаетcя командой #include ″<Имя модуля>.cpp″.

При создании первый (главный) файл проекта уже содержит заготовку основной функции программы – функции main(). Для создания файлов модуля и добавления их к проекту необходимо вновь вызвать многошаговый Мастер заготовок. Это делается с использованием команды меню File/New. Выполнение этой команды при открытом проекте вызовет открытие окна Мастера заготовок на вкладке Files, на которой необходимо выбрать тип файла, добавляемого к проекту.

/AutoShape 16 /Файл Book.h:

#ifndef book_h

#define book_h

class СBook{

public: char Name[30];

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]