Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Предкомпилированные заголовкиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Предварительно откомпилированные заголовки – в средах программирования на языках С и С++ – способ ускорить компиляцию программ за счёт предварительной обработки так называемых заголовочных файлов, которые содержат интерфейсы модулей и, согласно нормам данных языков программирования, подключаются к программе путём прямой вставки их текстов в тело основной программы с помощью специальной директивы препроцессора #include. Предкомпилированные заголовки сохраняются на диске в виде файлов во внутреннем формате компилятора и при повторных компиляциях проекта время на их обработку и подключение существенно сокращается. Впрочем, предварительная компиляция заголовка помогает не всегда: 1. При изменении любого из предкомпилируемых заголовков перекомпилируется весь набор. 2. При полной перекомпиляции выигрыш по времени получается, когда один и тот же набор применяется как минимум в двух единицах компиляции. Поэтому, как правило, в предкомпилируемый набор включают всевозможные библиотечные заголовки, крупные и в то же время редко изменяющиеся.
#include <vcl.h> #include <string> #pragma hdrstop
- ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop; Понятие пространства имен
В больших проектах наблюдается серьезная проблема – конфликт идентификаторов. Она решается с помощью пространства имен. namespace Sys { int var; void Proc(); }
Внутри пространства имен обращение к определенным внутри переменным и подпрограммам можно осуществлять, используя неполную форму записи:
var = 10; Proc(); за пределами надо использовать полную форму записи:
Sys::var = 10; Sys::Proc();
Для того чтобы избежать возможного конфликта идентификаторов, все определения внутри модуля следует помещать в пространство имен. Следует давать небольшой буквенный идентификатор, который будет соответствовать префиксу файла.
Существует возможность открыть пространство имен таким образом, чтобы можно было использовать неполную форму записи. Для этого надо написать строку: using namespace Sys; (директива)
Но следует отметить, что данная конструкция является причиной многих ошибок, поэтому так писать не стоит. Существует второй способ открыть пространство имен – это открыть его для конкретного определения: using Sys::Proc(); (определение) Но рекомендуется использовать Sys::Proc();
Идентификаторы, объявленные вне пространства имен, относятся к так называемому глобальному пространству имен, доступ к которым осуществляется с помощью оператора::
::Funk();
Для того чтобы была возможность закрыть доступ к данным и подпрограммам внутри данного пространства существует пространство имен без имени:
namespace { ... }
Пространства имен могут быть вложенными:
namespace Sys { namespace Local { int var; ... } ... } Sys::Local::var = 10;
Замечание! Когда возникает желание объявить переменный тип данных или подпрограмму внутри пространства имен, а реализовать за пределами (или наоборот), следует поступать так:
Классы, функции и переменные, которые являются стандартными компонентами компиляторов С++, находятся в пространстве имен std. Это относится к заголовочным файлам без.h.
Сделать доступным пространство имен std для программы можно несколькими способами.
• Можно поместить using namespace std; перед определением функции в файле, в результате чего все содержимое пространства имен std будет доступно для каждой функции в файле. • Можно поместить using namespace std; в определении функции • using std::cout; • std::cout.
Пространства имен могут находиться на глобальном уровне или внутри других пространств имен, однако они не могут быть помещены в блок. Следовательно, имя, объявленное в пространстве имен, по умолчанию обладает внешним связыванием (если оно не ссылается на константу).
Пространства имен открыты. Это означает, что можно включать новые имена в существующие пространства имен.
Предположим, что одно и то же имя определено как в пространстве имен, так и области объявлений. При попытке применить объявление using, чтобы поместить имя из пространства имен в область объявлений, оба имени вступят в конфликт, и отобразится сообщение об ошибке. Если с помощью директивы using перенести имя из пространства имен в область объявлений, локальная версия этого имени перекроет версию из простраства имен.
Недопустимо использование имен из неименованного пространства в любом файле, кроме того, что содержит объявление пространства имен. Это может служить альтернативой применению статических переменных с внутренним связыванием.
14. Классы в языке C++. Наследование. Конструкторы и деструкторы. Стандартные конструкторы. Создание объектов по значению (на стеке) и по ссылке (в динамической памяти). Операторы new и delete. Размещающий оператор new. Порядок конструирования и разрушения объектов. Вложенные определения классов. «Друзья» класса. Статические члены класса.
Спецификация базового типа выполняет три вещи: • Определяет, сколько памяти нужно объекту. • Определяет, как интерпретируются биты памяти. • Определяет, какие операции, или методы, могут быть применены с использованием этого объекта данных.
Классы в С++ Классы в С++ определяются с помощью одного из ключевых слов: class или struct.
Атрибуты доступа в классах: public, protected, private. Их можно чередовать.
В работе секций protected и private в Delphi и C++ есть различия: В Delphi классы внутри одного модуля могут обращаться к данным и подпрограммам друг друга без ограничений. А действие секций protected и private распространяется только за пределами данного модуля. В С++ действие этих секций распространяется на любые два класса. Но установленные ограничения можно обойти с помощью специального оператора friend: Class TTextReader { friend class TList; };
После этого объект класса TList может обращаться к полям из секций private и protected класса TTextReader.
Метод класса может быть реализован по месту или отдельно от класса:
class TTextReader { public: TTextReader(); ~TTextReader() {... } // по месту }; TTextReader::TTextReader() // отдельно от класса – квалифицированное имя { ... }
Если класс описан в интерфейсной части модуля, его методы рекомендуется реализовывать отдельно от класса в cpp-файле, иначе при компиляции получаются огромные объектные модули. В том случае, когда некоторый класс надо сделать inline -методом, следует писать так:
class TTextReader { public: TTextReader(); ~TTextReader(); int ItemCount(); }; inline int TTextReader::ItemCount() { ... } Любая функция внутри определения класса автоматически становится встроенной.
|
||||
Последнее изменение этой страницы: 2016-08-14; просмотров: 473; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.54.153 (0.008 с.) |