Шаблон TMIDequeAsDoubleListIterator (deques.h)
Для управляемой косвенно двунаправленной очереди на основе
двусвязанного списка реализует итератор объектов. Элементы см. в
TMDoubleListIteratorImp.
Шаблон TMIDequeAsVector (deques.h)
Реализует управляемую двунаправленную очередь косвенных объектов T, используя в качестве основы реализации вектор.
Шаблон TMIDequeAsVectorIterator (deques.h)
Для управляемой косвенной двунаправленной очереди на основе
вектора реализует итератор объектов. Элементы см. в TMDequeAsVectorIterator.
Шаблон TMIDictionaryAsHashTable (dict.h)
Используя в качестве основы хеш-таблицу и заданное пользователем распределение A реализует управляемый косвенный словарь.
Подразумевается, что T - это один из четырех ассоциативных типов.
Шаблон TMIDictionaryAsHashTableIterator (dict.h)
Реализует итератор, который выполняет перебор по объектам
TMIDictionaryAsHashTable, используя заданное пользователем средство распределения памяти.
Шаблон TMIDoubleListImp (dlistimp.h)
Реализует управляемый двусвязанный список указателей на объекты типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор. Обрабатывает любые типы объектов.
Шаблон TMIDoubleListIteratorImp (dlistimp.h)
Реализует итератор двусвязанного списка. Этот итератор работает с любыми непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.
Шаблон TMIHashTableImp (hashimp.h)
Используя заданный пользователем распределитель памяти Alloc, реализует управляемую хеш-таблицу объектов типа T. Предполагается, что T имеет операцию ==, операцию копирования и заданный по умолчанию конструктор.
Шаблон TMIHashTableIteratorImp (hashimp.h)
Реализует итератор для перебора контейнеров TMIHashTableImp.
Шаблон TMIIAssociation (assoc.h)
Реализует управляемую ассоциацию, связывая косвенный ключ K
с косвенным значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:
unsigned HashValue( K & );
K должно также иметь допустимую операцию ==. Класс A представляет администратор хранения, заданный пользователем.
Шаблон TMIListImp (listimp.h)
Реализует управляемый список указателей на объекты типа T.
Так как указатели всегда имеют операцию копирования, этот класс
может обрабатывать любой тип объектов.
Шаблон TMiListIteratorImp (listimp.h)
Реализует итератор списка, работающий с любым косвенным управляемым списком. Функции-элементы см. в TMListIteratorImp.
Шаблон TMIQueueAsDoubleList (queues.h)
Реализует управляемую косвенную очередь объектов типа T, используя в качестве основы реализации двусвязанный список.
Шаблон TMIQueueAsDoubleListIterator (queues.h)
Реализует итератор для косвенных очередей, построенных на
основе списка. Функции-элементы см. в TMIDequeueAsVectorIterator.
Шаблон TMIQueueAsVector (queues.h)
Реализует управляемую очередь из указателей на объекты типа
T, используя в качестве основы реализации вектор.
Шаблон TMIQueueAsVectorIterator (queues.h)
Реализует итератор для управляемых косвенных очередей, построенных на основе списка.
Шаблон TMISArrayAsVector (arrays.h)
Реализует управляемый косвенный отсортированный массив объектов типа T, используя в качестве основы реализации вектор.
Функции-элементы см. в TMIArrayAsVector.
Шаблон TMISDoubleListImp (dlistimp.h)
Реализует управляемый отсортированный двусвязанный список
указателей на объекты типа T. Обрабатывает любые типы объектов.
Наследует функции-элементы TMIDoubleListImp.
Шаблон TMISDoubleListIteratorImp (dlistimp.h)
Реализует итератор двусвязанного списка. Этот итератор работает с любыми косвенными отсортированными двунаправленными списками. Функции-элементы см. в TMIDoubleListIteratorImp.
Шаблон TMISetAsVector (sets.h)
Реализует управляемую очередь указателей на объекты типа T,
используя в качестве основы реализации вектор. Для управления памятью используется TStandsardAllocator. См. также функции-элементы в TMIBagAsVector.
Шаблон TMISetAsVectorIterator (sets.h)
Реализует итератор для перебора объектов TMISetAsVector.
Функции-элементы см. в TMIArrayAsVectorIterator.
Шаблон TMISListImp (listimp.h)
Реализует управляемый отсортированный список указателей на
объекты типа T. Так как указатели всегда имеют операцию копирования, этот класс может обрабатывать любой тип объектов. Функции-элементы см. в TMIListImp.
Шаблон TMISListIteratorImp (listimp.h)
Реализует итератор списка, работающий с любым управляемым
косвенным списком. Функции-элементы см. в TMListIteratorImp.
Шаблон TMISListIteratorImp (listimp.h)
Реализует итератор списка, работающий с любым косвенным
списком. Функции-элементы см. в TMIListIteratorImp.
Шаблон TMIStackAsList (stacks.h)
Реализует управляемый стек указателей на объекты типа T, используя в качестве основы реализации список. Функции-элементы см.
в TMIStackAsVector.
Шаблон TMIStackAsListIterator (stacks.h)
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMIListIteratorImp.
Шаблон TMIStackAsVector (stacks.h)
Реализует управляемый стек указателей на объекты типа T, используя в качестве основы реализации вектор.
Шаблон TMIStackAsVectorIterator (stacks.h)
Реализует итератор для управляемых косвенных стеков, построенных на основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Шаблон TMISVectorImp (vectimp.h)
Реализует управляемый отсортированный вектор указателей на
объекты типа T. Предполагается, что указатели всегда имеют операцию копирования, поэтому данный класс может работать с любым типом объектов. Функции-элементы см. в TMICVectorIteratorImp.
Шаблон TMISVectorIteratorImp (vectimp.h)
Реализует итератор вектора, работающий с косвенным управляемым и отсортированным вектором объектов типа T. Функции-элементы
см. в TMIVectorIteratorImp.
Шаблон TMIVectorImp (vectimp.h)
Реализует управляемый вектор указателей на объекты типа T.
Предполагается, что указатели всегда имеют операцию копирования,
поэтому данный класс может работать с любым типом объектов.
Шаблон TMIVectorIteratorImp (vectimp.h)
Реализует итератор вектора, работающий с косвенным управляемым вектором.
Шаблон TMListElement (listimp.h)
Определяет узлы TMListImp, TMIListImp и родственных классов.
Шаблон TMListImp (listimp.h)
Реализует управляемый список объектов типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор.
Шаблон TMListImp (listimp.h)
Реализует список объектов типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор.
Шаблон TMListIteratorImp (listimp.h)
Реализует итератор списка, работающий с непосредственным
управляемым списком.
Шаблон TMQueueAsDoubleList (queues.h)
Реализует управляемую очередь объектов типа T, используя в
качестве основы реализации двусвязанный список. Функции-элементы
см. в TMDequeueAsDoubleList.
Шаблон TMQueueAsDoubleListIterator (queues.h)
Реализует итератор для очередей, построенных на основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.
Шаблон TMQueueAsVector (queues.h)
Реализует управляемую очередь объектов типа T, используя в
качестве основы реализации вектор. Предполагается, что T имеет
операцию копирования, операцию < и заданный по умолчанию конструктор.
Шаблон TMQueueAsVectorIterator (queues.h)
Реализует итератор для управляемых очередей, построенных на
основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.
Шаблон TMSArrayAsVector (arrays.h)
Реализует отсортированный массив объектов типа T, используя
в качестве основы реализации вектор. За исключением AddAt все
функции-элементы наследуются из TMArrayAsVector.
Шаблон TMSArrayAsVectorItetator (arrays.h)
Реализует объект итератора для перебора объектов TMSArrayAsVector. Элементы и операции см. в TMArrayAsVectorIterator.
Шаблон TMSDoubleListImp (dlistimp.h)
Реализует управляемый двусвязанный список объектов типа T.
Предполагается, что T имеет операцию ==, операцию < и заданный по
умолчанию конструктор. Функции-элементы см. в TMDoubleListIteratorImp.
Шаблон TMSDoubleListIteratorImp (dlistimp.h)
Реализует итератор двусвязанного списка. Этот итератор работает с непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.
Шаблон TMSetAsVector (sets.h)
Реализует управляемую очередь объектов типа T, используя в
качестве основы реализации вектор. В отличие от мультимножества,
множество не может содержать дублируемых элементов. Кроме перечисленных ниже функций-элементов, TMSetAsVector наследует функции-элементы из TMBagAsVector. См. также функции-элементы в TMBagAsVector.
Шаблон TMSetAsVectorIterator (sets.h)
Реализует итератор для перебора объектов TMSetAsVector.
Функции-элементы см. в TMArrayAsVectorIterator.
Шаблон TMSListImp (listimp.h)
Реализует управляемый отсортированный список объектов типа
T. Предполагается, что T имеет операцию копирования, операцию < и
заданный по умолчанию конструктор.
Шаблон TMSListIteratorImp (listimp.h)
Реализует итератор списка, работающий с непосредственным
управляемым отсортированным списком. Функции-элементы см. в
TMListIteratorImp.
Шаблон TMStackAsList (stacks.h)
Реализует управляемый стек объектов типа T, используя в качестве основы реализации список. Функции-элементы см. в TMStackAsVector.
Шаблон TMStackAsListIterator (stacks.h)
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMListIteratorImp.
Шаблон TMStackAsVectorIterator (stacks.h)
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Шаблон TMSVectorImp (vectimp.h)
Реализует управляемый отсортированный вектор объектов типа
T. Предполагается, что T имеет операцию копирования и используемый по умолчанию конструктор. Функции-элементы см. в TMCVectorImp.
Шаблон TMSVectorIteratorImp (vectimp.h)
Реализует итератор вектора, работающий с непосредственным
отсортированным и управляемым вектором объектов типа T. Функции-элементы см. в TMVectorIteratorImp.
Шаблон TMVectorImp (vectimp.h)
Реализует обслуживаемый вектор объектов типа T. TMVectorImp
предполагает, что T имеет операцию копирования и используемый по
умолчанию конструктор.
Шаблон TMVectorIteratorImp (vectimp.h)
Реализует итератор вектора, работающий с непосредственным
управляемым вектором объектов типа T.
Шаблон TQueueAsDoubleList (queues.h)
Реализует очередь объектов типа T, используя в качестве основы реализации двусвязанный список. Функции-элементы см. в TMQueueAsDoubleList.
Шаблон TQueueAsDoubleListIterator (queues.h)
Реализует итератор для очередей, построенных на основе списка. Функции-элементы см. в TMDequeueAsDoubleListIterator.
Шаблон TQueueAsVectorIterator (queues.h)
Реализует итератор для очередей, построенных на основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.
Шаблон TSArrayAsVector (arrays.h)
Реализует отсортированный массив объектов типа T, используя
в качестве основы реализации вектор. За исключением AddAt все
функции-элементы наследуются из TMArrayAsVector.
Шаблон TSArrayAsVectorItetator (arrays.h)
Реализует объект итератора для перебора объектов TSArrayAsVector. Элементы и операции см. в TMArrayAsVectorIterator.
Шаблон TSDoubleListImp (dlistimp.h)
Реализует отсортированный двусвязанный список объектов типа
T. Предполагается, что T имеет операцию ==, операцию < и заданный
по умолчанию конструктор. Функции-элементы см. в TMSDoubleListIteratorImp.
Шаблон TSDoubleListIteratorImp (dlistimp.h)
Реализует итератор двусвязанного списка. Этот итератор работает с любыми непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.
Шаблон TSetAsVector (sets.h)
Реализует множества объектов типа T, используя в качестве
основы реализации вектор. Для управления памятью используется
TStandsardAllocator. См. также функции-элементы в TMBagAsVector.
Шаблон TSetAsVectorIterator (sets.h)
Реализует итератор для перебора объектов TSetAsVector. Функции-элементы см. в TMArrayAsVectorIterator.
Шаблон TSListImp (listimp.h)
Используя для распределения памяти TStandardAllocator, реализует отсортированный список объектов типа T. Предполагается,
что T имеет операцию копирования, операцию < и заданный по умолчанию конструктор. Функции-элементы см. в TMListImp.
Шаблон TSListIteratorImp (listimp.h)
Реализует итератор списка, работающий с непосредственным от-
сортированным списком. Функции-элементы см. в TMListIteratorImp.
Шаблон TStackAsList (stacks.h)
Реализует управляемый стек объектов типа T, используя в качестве основы реализации список. Функции-элементы см. в TMStackAsVector.
Шаблон TStackAsListIterator (stacks.h)
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Шаблон TStackAsVector (stacks.h)
Реализует управляемый стек объектов типа T, используя в качестве основы реализации вектор.
Шаблон TStackAsVector (stacks.h)
Реализует стек объектов типа T, используя в качестве основы
реализации вектор, а для управления памятью - TStandardAllocator.
Шаблон TStackAsVectorIterator (stacks.h)
Реализует итератор для стеков, построенных на основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Шаблон TSVectorImp (vectimp.h)
Реализует отсортированный вектор объектов типа T. Предполагается, что T имеет операцию копирования и используемый по умолчанию конструктор. Функции-элементы см. в TMCVectorImp.
Шаблон TSVectorIteratorImp (vectimp.h)
Реализует итератор вектора, работающий с непосредственным
отсортированным вектором объектов типа T. Функции-элементы см. в
TMVectorIteratorImp.
Шаблон TVectorImp (vectimp.h)
Реализует управляемый вектор объектов типа T. TVectorImp
предполагает, что T имеет операцию копирования и используемый по
умолчанию конструктор. Функции-элементы см. в TMVectorImp.
Шаблон TVectorIteratorImp (vectimp.h)
Реализует итератор вектора, работающий с непосредственным
управляемым вектором объектов типа T. Функции-элементы см. в
TMVectorIteratorImp.
Шаблоны документов
Шаблоны документа объединяют вместе классы документа и классы отображаемого элемента, создавая новый класс. Администратор
документа поддерживает список шаблонов документа, который используется при создании нового экземпляра Doc/View. Ниже поясняется,
как создавать и использовать шаблоны документов.
Си с классами
C++ - это Си с классами. Borland C++ - это версия фирмы Borland
языка С++, разработанного Брайоном Страуструпом из фирмы AT&T, как
расширение языка Си.
В целом язык С++ является надмножеством языка Си. Это означает,
что программы Си можно компилировать в среде С++, однако компилировать программы С++ в среде Си, при наличии в них каких-либо специфических для С++ конструкций, нельзя. Некоторые ошибочные ситуации возникают из-за различий этих двух родственных языков. Так, одна и та же
функция, дважды объявленная в Си с различными значениями аргументов,
вызовет ошибку повторения имен. Однако, в С++ допустимо это или нет,
зависит от других обстоятельств.
Главная возможность C++ - это классы, которые позволяют "упрятывать" функции и данные в отдельные конструкции. Отдельные конструкции называются объектами, а программирование с использованием объектов называют объектно-ориентированным программированием (ООП).
Почему бы не рассмотреть каков Турбо и Borland С++ немедленно?
Вот наша первая программа:
#include <stdio.h>
main()
{
int i, j;
i = 25; j = 17;
printf("Итого: %d\n", i+j);
return 0;
}
Сюрприз! В этой программе вы не увидели никаких отличий от программирования на Си. Чудесно! Это вселяет оптимизм, так как программы,
написанные на языке Си, можно компилировать в Турбо и Borland C++.
Зато Borland C++ имеет многочисленные расширения.
Указание комментариев
v
#include <iostream.h> // Новая библиотека потоков
// ввода-вывода
class sber_bank { // Новый способ создавать структуры
int memory_bank; // с данными и функциями.
public:
void add(int a, int b) { // Встроенная функция
memory_bank = a + b; // Сохранение данных в объекте
cout << "Итог: "; // Новый способ ввода-вывода
cout << memory_bank;
}; ^
}; Операция вывода потока
main()
{
sber_bank deep_thought; // Создание объекта и
deep_thought.add(25, 17); // обращение к нему
}
В общем случае семантика С++ намного более сложная по сравнению
с Си, однако, это ведет к большей надежности и заставляет программистов быть более "дисциплинированными".
Символические цели
Символическая цель вынуждает MAKE строить в формирующем файле несколько целей (вам не нужно будет полагаться на сцепленные
зависимости). В строке зависимости перечисляются все цели, которые вы хотите построить. Никаких команд для символических целей
указывать не нужно.
Например, в следующем формирующем файле символические цели
Files строятся из FILE1.EXE и FILE2.EXE.
Files: file1.exe file2.exe #Эта цель не имеет команд
file1.exe: file1.obj
bcc file1.obj
file2.exe: file2.obj
bcc file2.obj
Для символических целей действуют следующие правила:
Символические цели не требуют командной строки.
Символической цели нужно давать уникальное имя (оно не может быть именем файла в текущем каталоге).
Именует символические цели согласно с правилами операционной системы.
Синтаксис явных правил
Явное правило - это правило, которое явным образом задает
полные имена файлов. Явные правила имеют следующий вид:
целевой_файл[целевой_файл]...:[{маршрут}][исходный_файл...]
[команда]
.
.
.
Здесь "целевой_файл" представляет собой файл, который должен
быть обновлен, "исходный_файл" представляет собой файл, от которой зависит файл "целевой_файл", а "команда" представляет собой
любую команду, допустимую в DOS (включая вызовы .BAT файлов и выполнение .EXE и .COM файлов).
Явные правила определяют одно или несколько имен результирующих файлов, ноль или более исходных файлов, а также необязательный перечень команд, которые должны быть выполнены. Имена результирующего (целевого) и исходного файлов, указываемые в явных правилах, могут содержать обычные спецификации дисковода и каталога,
допустимые в DOS, а также содержать трафаретные символы.
Обязательны для соблюдения следующие указанные ниже синтаксические правила:
"Целевой_файл" должен начинаться с самого начала строки (в
столбце 1);
Исходному файлу (файлам) "исходный_файл" должны предшествовать по меньшей мере один символ пробела или табуляции,
расположенные после двоеточия;
Каждая "команда" должна начинаться со структурного отступа
(ей должен предшествовать по меньшей мере один символ пробела или табуляции). Как было отмечено ранее, если список
исходных файлов или заданная команда не могут уместиться
на одной строке, то в качестве символа продолжения строки
может использоваться обратная косая черта.
Наличие как имен исходных файлов, так и команд является необязательным; возможно существование явных правил, которые состоят
только из строки целевой_файл[целевой_файл...], за которой следует символ двоеточия.
Идея использования явного правила заключается в том, что команда или перечень команд будут осуществлять создание или обновление результирующего файла целевой_файл как правило на основе
исходного файла "исходный_файл". Когда утилита MAKE обнаруживает
явное правило, она сначала проверяет, не являются ли сами исходные файлы "исходный_файл" результирующим файлом "целевой_файл" в
каком-либо другом правиле формирующего файла. Если это так, то
сначала утилита MAKE анализирует это второе правило.
После того, как на основе других правил были созданы или обновлены все исходные файлы "исходный_файл", утилита MAKE проверяет наличие результирующего файла "целевой_файл". Если "целевой_файл" не существует, то все команды выполняются в том порядке, в котором они заданы. Если "целевой_файл" существует, то дата
и время его последней модификации сравниваются с датой и временем
каждого исходного файла "исходный_файл". Если какой-либо исходный
файл был модифицирован после того, как был модифицирован файл
"целевой_файл", то выполняется заданный перечень команд.
Имя файла может указываться в левой части явного правила
файла описания утилиты MAKE лишь один раз.
Каждая командная строка в явном правиле начинается с символа
пробела. Утилита MAKE рассматривает все строки, которые следуют
за явным правилом и продолжаются до очередной строки, начинающейся со столбца 1 (которой не предшествуют символы пробела) или до
конца файла, как часть списка команд для этого правила. Пустые
строки игнорируются.
Явное правило, за которым не следуют командные строки, интерпретируется несколько иначе, чем явное правило с командными
строками.
Если в состав явного правила входят команды, то результирующий файл зависит только от тех файлов, которые перечислены в явном правиле.
Если в явном правиле не заданы никакие команды, результирующий файл зависит от двух наборов файлов: тех файлов,
которые заданы в явном правиле, и от всех файлов, которые
подходят под определение неявного правила для результирующего файла (файлов). Это позволяет задавать зависимости,
которые будут обрабатываться неявным правилом. Например:
.c.obj
BCC -c $<
рrog.obj:
Файл рrog.obj зависит от файла рrog.c; если не совпадают даты этих файлов, то будет выполняться командная строка:
BCC -c рrog.c
Синтаксис команд
Как явные, так и неявные правила (описываемые ниже) могут
содержать списки команд. Команды в списке команд подчиняются следующим синтаксическим правилам:
[префикс...]тело_команды
Каждая команда в списке команд состоит из (необязательного)
списка префиксов, за которым следует тело единственной команды.
Синтаксис неявных правил
Утилита MAKE позволяет на ряду с явными правилами задавать
неявные правила. Неявные правила представляют собой обобщение явных правил; они применяются ко всем файлам, которые имеют соответствующие расширения имен файлов.
Ниже приводится пример, который иллюстрирует отношение между
двумя правилами. Рассмотрим явное правило из предыдущего примера.
Данное правило является типичным, поскольку оно следует общему
принципу: объектный файл(с расширением имени .OBJ) зависит от
файла с тем же основным именем и расширением .C и создается путем
выполнения программы BCC. Фактически, можно создать формирующий
файл для утилиты MAKE, который будет содержать несколько(или
несколько десятков) явных правил, соответствующих одному и тому
же формату.
Переписывая явное правило в виде неявного правила, вы можете
убрать все явные правила, которые подчиняются одинаковому форма ту. Неявное правило будет иметь следующий вид:
.c.obj:
BCC -c $<
Это правило означает следующее: "Любой файл с расширением .C
может быть оттранслирован в файл с тем же основным именем и расширением .OBJ с помощью следующей последовательности команд".
Создание файла .OBJ происходит с помощью второй строки этого правила, где $< означает имя файла с расширением, присущим исходному
файлу (.C). (Символ $< представляет макрокоманду особого вида.
Объяснение макрокоманд приводится далее. Макрокоманда $< при каждом выполнении команды будет заменена полным именем соответствующего исходного файла .C).
Идентификатор $< представляет собой специальную макрокоманду. Макрокоманды обсуждаются ниже. Макрокоманда $< при каждом выполнении команды будет заменяться полными именем соответствующего
исходного файла .С.
Ниже приводится синтаксис неявного правила:
[{исходный_каталог}].исх_расшир.[{целевой_каталог}]цел_расшир:
[команда]
...
Как и ранее, использование команды является необязательным.
Если команда используется, то перед ней должны стоять один или
несколько символов пробелов.
"Исх_расшир" ( расширение имени файла, которое должно начинаться точкой в столбце 1) представляет собой расширение имени
исходного файла; то есть, оно относится к любому файлу, который
имеет следующий формат:
имя_файла.исх_расшир
Аналогично, "цел_расшир" относится к файлу, который удовлетворяет спецификации:
имя_файла.цел_расшир
Здесь "имя_файла" является одинаковым для обоих файлов. Другими словами, данное неявное правило заменяет все явные правила,
которые соответствуют следующему формату:
имя_файла.исх_расшир:имя_файла.цел_расшир
[команда]
...
для любого имени файла.
Если утилита MAKE не может обнаружить явное правило для заданного результирующего файла, или если имя результирующего файла
появляется в явном правиле, у которого отсутствуют команды, то
она использует неявные правила.
Расширение имени интересующего утилиту MAKE файла используется для определения того неявного правила, которое должно использоваться. Это неявное правило применяется в том случае, если
обнаружен файл с тем же самым основным именем, что и у результирующего файла, но с заданным расширением исходного файла.
Предположим, например, что у вас имеется формирующий файл
утилиты MAKE (с именем MAKEFILE), который имеет следующее содержимое:
c.obj:
BCC -c $<
Если у вас имеется написанная на Си программа с именем
RATIO.C, которую вы хотите скомпилировать в файл RATIO.OBJ, то вы
можете воспользоваться командой:
make ratio.obj
Утилита MAKE будет рассматривать файл RATIO.OBJ в качестве
результирующего файла. Поскольку явное правило для создания файла
RATIO.OBJ не существует, утилита MAKE применяет неявное правило и
генерирует следующую команду:
BCC -c ratio.c
которая, естественно, выполняет компиляцию для создания файла
RATIO.OBJ.
Утилита MAKE использует неявные правила и в том случае, когда ей задаются явные правила, не сопровождающиеся никакими командами. Предположим, что в начале файла описания вы задали следующее неявное правило:
.c.obj:
BCC -c $<
Если это правило задано, вы можете удалить команду из приведенного ниже явного правила:
myрrog.obj: myрrog.c include\stdio.h
BCC -c myрrog.c
Процесс обработки будет прежним.
Если вы используете систему Borland C++ и разрешаете утилите
MAKE выполнять автоматическую проверку зависимостей, вы можете
удалить все явно заданные зависимости, в которых объектные файлы
указываются в качестве результирующих. Если задана автоматическая
проверка зависимостей, и используются неявные правила, то представленный в начале раздела по явным правилам пример с тремя правилами превращается в следующий:
c.obj:
BCC -c $<
рrog.exe: myрrog.obj рrog2.obj
tlink lib\c0s myрrog рrog2, рrog, ,lib\cs
Вы можете создать несколько неявных правил с одним и тем же
расширением имени результирующего файла. Если для заданного расширения имени результирующего файла имеется более одного неявного
правила, то правила проверяются в том порядке, в котором они появляются в файле описания, до тех пор, пока не найдется правило,
подходящее для расширения имени исходного файла, или до тех пор,
пока утилита MAKE не осуществит проверку всех применимых правил.
Утилита MAKE использует первое неявное правило, в котором
указан файл с расширением имени исходного файла. Даже если выполнение команды, заданной в этом правиле, заканчивается безуспешно,
никакие неявные правила больше не проверяются.
Все строки, следующие за неявным правилом вплоть до очередной строки, которая не начинается с символа пробела, или до конца
файла, считаются частью списка команд для этого правила.
Цель в явном правиле получает свою командную строку из явного правила. Следующий пример показывает неявное правили и явное
правило без командной строки:
.c.obj
bcc -c $< #использует макрокоманду $<
myprog.obj: #явное правило, использующее команду
# bcc -c myprog.c
Синтаксис встроенного ассемблера и его использование
Чтобы включить в код Си/С++ инструкции ассемблера, используйте ключевое слово asm и следующий формат:
asm код_операции операнды;
где "код_операции" - допустимая инструкция процессора 80х86,
"операнды" содержат операнды (операнд), допустимые для указанной
операции (константы, переменные и метки). Концом оператора asm
является символ ; или новая строка. После точки с запятой на той
же строке может размещаться новый оператор asm, но на следующей
строке оператор продолжаться не может. Для включения нескольких
операторов asm их можно заключить в фигурные скобки (первая скобка должна быть на той же строке, что и asm):
asm {
pop ax; pop ds
iret
}
Точки с запятой для комментария здесь не используются (как в
TASM). При комментировании таких операторов применяйте стандартные комментарии Си. Ассемблерная часть оператора копируется непосредственно в вывод и включаются в операторы языка ассемблера,
которые Borland С++ генерирует для инструкций Си и С++. Все идентификаторы Си заменяются на соответствующие эквиваленты ассемблера. Каждый оператор asm рассматривается как оператор Си.
Оператор asm может использоваться в функции или как внешнее
описание вне функции. Оператор asm, размещенные внутри функции,
помещаются в сегмент кода, а операторы asm вне функции - в сегмент данных.
Системные сообщения
WM_COMPACTING | WM_QUEUESYNC |
WM_DEVMODECHANGE | WM_SPOOLERSTATUS |
WM_ENTERIDLE | WM_SYSCOLORCHANGE |
WM_FONTCHANGE | WM_SYSCOMMAND |
WM_NULL | WM_TIMECHANGE |
WM_PALETTECHANGED | WM_WININICHANGE |
WM_PALETTEISCHANGING | WM_POWER |
Скрытие данных в потомках
При порождении потомка класса у вас есть выбор в определении типа элементов. По умолчанию элементы базового класса автоматически получают приватный тип, если только вы не захотите иначе. Использование
же ключевого слова public, при порождении потомка класса, делает все
элементы базового класса общими в порожденном классе. Приватные элементы базового класса остаются приватными, и не будут доступны из потомков. Вот где требуются защищенные элементы (protect).
Замечание. Если вы хотите использовать в потомке класса элементы базового класса, то они должны быть объявлены как защищенные
или общие. Доступ к приватным элементам базового класса
невозможен никак иначе, как из их приватных функций элементов или с помощью дружественных функций, объявленных
как friend.
В приведенной ниже таблице показана доступность элементов базового класса для его потомка (в зависимости от определенного типа
доступа в базовом классе и потомке):
Тип доступа в Тип доступа Доступность элеме-
базовом классе в потомке нта базового класса
приватный приватный недоступен
защищенный приватный приватный
общий приватный приватный
приватный общий недоступен
защищенный общий защищенный
общий общий общий
По мере изучения материала вы познакомитесь с многочисленными
примерами использования управления доступом.
Содержимое окон печати
Простейшим видом генерируемой распечатки является копия окна
(оконные объекты состоят из одной страницы и знают, как отображаться в контексте устройства). Чтобы создать объект распечатки
окна, постройте объект и передайте строку заголовка и указатель
на нужное окно.
Часто требуется, чтобы окно создавало распечатку в ответ на
команду меню. Пример вы найдете в программе PRINTING.CPP.
Соглашения принятые в справочнике по функциям Borland С++
В справочнике по функциям Borland С++ приняты следующие соглашения:
в левой части заголовочной строки указано имя функции, а в
правой - ее назначение;
следующая строка содержит синтаксис функции, из которого
также видно в каком заголовочном файле (.h) содержится
прототип данной функции.
Вот так, примерно, выглядит описание функции:
Имя_функции Назначение. Краткое изложение действий, выпол-
няемых функцией.
DOS UNIX Win16
OS/2 Win32
ANSI C++ ANSI C Синтаксис #include <имя_заголовка.h>
В этой части перечисляются файлы заголовков,
содержащие прототип функции или описания констант, перечисляемых типов и т.д. (т.е. то, что
использует данная функция).
имя_функции(параметр[,...]);
Подобная запись описывает синтаксис функции.
Расшифровка значков-пpедупpеждений под
именем функции:
DOS | Функция позволяет pаботать в DOS |
Win16 | Функция позволяет pаботать в 16-pазpядном Windous |
Win32 | Функция позволяет pаботать в 32-pазpядном Windous |
OS/2 | Функция позволяет pаботать в OS/2 |
ANSI C | Функция позволяет pаботать в aNsI C |
ANSI C++ | Функция позволяет pаботать в aNsI C++ |
UNIX | Функция позволяет pаботать в UNIX |
Сообщения буфера вырезанного изображения
WM_ASKCBFORMATNAME | WM_PASTE |
WM_CHANGECBCHAIN | WM_PAINTCLIPBOARD |
WM_CLEAR | WM_RENDERALLFORMATS |
WM_CUT | WM_RENDERFORMAT |
WM_COPY | WM_SIZECLIPBOARD |
WM_DESTROYCLIPBOARD | WM_UNDO |
WM_DRAWCLIPBOARD | WM_VSCROLLCLIPBOARD |
WM_HSCROLLCLIPBOARD |
Сообщения DDE
WM_DDE_ACK | WM_DDE_POKE |
WM_DDE_ADVICE | WM_DDE_REQUEST |
WM_DDE_DATA | WM_DDE_TERMINATE |
WM_DDE_EXECUTE | WM_DDE_UNADVISE |
WM_DDE_INITIATE |
No such file or directory
Error 0 Ошибка 0 | Invalid data Неверные данные |
Invalid function number Неверный номер функции | No such device Такого устройства нет |
No such file or directory Такого файла или каталоге нет | Attempt to remove current directory Попытка удалить текущий каталог |
Path not found Путь не найден | Not same device Другое устройство |
Too many open files Слишком много открытых файлов | No more files Файлов больше нет |
Permission denied Разрешение не дано | Invalid argument Неверный аргумент |
Bad file number Неверный номер файла | Arg list too big Список аргументов слишком велик |
Memory arena trashed Испорчена память | Exec format error Ошибка формата запуска |
Not enough memory Недостаточно памяти | Cross-device link Кросс-компоновка устройств |
Invalid memory block address Неверный адрес блока памяти | Math argument Математический аргумент |
Invalid environment Неверная операционная среда | Result too large Результат слишком велик |
Invalid format Неверный формат | File already exists Файл уже существует |
Invalid access code Неверный код доступа |
No space left in device
Bad address | Неверный адрес |
Block device required | Требуется блочное устройство |
Broken pipe | Нарушение конвейера |
Executable file in use | Выполняемый файл используется |
File too large | Файл слишком велик |
Illegal seek | Недопустимая установка |
Inapropriate I/O control operation | Неподходящая операция управле ния вводом-выводом |
Input/output error | Ошибка ввода-вывода |
Interrupted function call | Прерванный вызов функции |
Is a directory | Является каталогом |
Name too long | Слишком длинное имя |
No child processes | Нет дочерних процессов |
No space left in device | На устройстве не осталось места |
No such device or address | Нет такого адреса или устройства |
No such process | Нет такого процесса |
Not a directory | Не является каталогом |
Operation not permitted | Операция не разрешена |
Possible deadlock | Возможен клинч |
Read-only file system | Файловая система доступна только по чтению |
Resource busy | Ресурс занят |
Resource temporary | Ресурс временно недоступен unavailable |
Too manu links | Слишком много связей |
Поведение calloc, malloc или realloc, если запрошен
нулевой размер
calloc и malloc проигнорируют такой запрос и возвратят 0.
realloc освободит блок.
Поведение функции abort в отношении открытых и временных
файлов
Буферы файлов не очищаются, а файлы не закрываются.
Статус, возвращаемый функцией exit при ненулевом
значении аргумента, EXIT_SUCCESS или EXIT_FAILURE
Особые действия не предусмотрены. Статус возвращается в том
виде, в котором он передан. Статус представлен как signed char.
Набор имен операционной среды и способ изменения значений переменных операционной среды при помощи getenv
Строки операционной среды те самые, что определяются командой SET. Для изменения этих строк на время выполнения текущей
программы служит putenv, но для постоянного изменения их нужно
использовать команду SET.
Содержимое и режим обработки строки функцией system
Строка интерпретируется как команда операционной системы.
Используется COMSPEC или запускается COMMAND.COM (для 16-разрядных программ) или CMD.EXE (для 32-разрядных программ), и аргумент
функции передается ему как команда на выполнение. Могут быть выполнены любые внутренние команды системы, а также файлы .BAT и
.EXE.
Содержимое строк сообщений об ошибке, возвращаемых
функцией strerror
См. выше.
Использование локального таймера и хранение времени в
форме "AM/PM"
Определяются локальные время и данные PC.
Отсчет времени системными часами
Представлен тактами часов, а начало отсчета считается с момента запуска программы.
Форматы даты и времени
Borland C++ реализует форматы ANSI.
Назад | Содержание | Вперед
Сообщения инициализации
WM_INITDIALOG | WM_INITMENUPOPUP |
WM_INITMENU |
Сообщения компилятора Help об ошибках
Компилятор справочников выводит на экран сообщение, когда в процессе построения файла ресурсов обнаруживается та или иная ошибка. Ошибки, обнаруживаемые при обработке файла описания проекта, имеют коды, начинающиеся с префикса P, а соответствующие сообщения выглядят следующим образом:
Error P1025: line...7 of filename.HPJ : Section heading sectionname unrecognized.
Warning P1039: line...38 of filename.HPJ : [BUILDTAGS] section missed.
Ошибки, обнаруживаемые при обработке информационных файлов (.RTF), имеют коды, начинающиеся с префикса R, а соответствующие сообщения выглядят следующим образом:
Error R2025 : File environment error. Warning R2501 : Using old-key phrase table.
Если это возможно, компилятор сообщает номер статьи и/или имя информационного файла, где обнаружена ошибка. Номер статьи, сообщаемый компилятором, представляет собой ее порядковый номер в файле .RTF (первая, вторая и т.д.). Эти номера могут совпадать с номером страницы, показываемым текстовым процессором, в зависимости от того, какую длину гипотетической страницы (в строках) вы установили. Напомним, что статьи в информационных файлах отделяются знаком "конец страницы", хотя в справочной системе понятие "страница" не используется.
Сообщения, начинающиеся со слова Error (Ошибка) соответствуют серьезным (фатальным) ошибкам. Сообщения о таких ошибках выводятся на экран всегда и при их возникновении построение справочного файла не производится. Сообщения, начинающиеся с Warning (Предупреждение), связаны с менее серьезными ошибками. При наличии ошибок только второго типа, процесс компиляции проходит до конца и создается соответствующий справочный файл, который может быть использован в рамках системы интерактивной документации Windows. Однако при этом справочник Help может функционировать не совсем так, как задумывалось разработчиком. Количество предупредительных сообщений, выводимых компилятором на экран, может регулироваться пользователем.
При обработке файла описания проекта компилятор игнорирует ошибочные строки и пытается продолжить компиляцию. Это означает, что ошибки, обнаруженные на начальном этапе обработки, могут приводить к лавине наведенных ошибок на следующих этапах. Аналогично обрабатываются ошибки в информационных файлах: если ошибка, которая произошла при обработке файлов тем справочника, не очень серьезная, то компиляция продолжается. В качестве реакции на единственную ошибку в информационном файле компилятор может выдавать сразу несколько сообщений. Так при ошибке в идентификаторе определенной статьи на экран будет выводиться сообщение об ошибке всякий раз, когда компилятор будет встречать в информационном файле ссылку на эту статью. Такая ошибка легко устраняется путем простой коррекции текста сноски, определяющего контекстную строку этой статьи.
Назад | Содержание | Вперед
Сообщения мультимедиа
MM_ADLIB | MM_MOM_CLOSE |
MM_JOY1BUTTONDOWN | MM_MOM_DONE |
MM_JOY1BUTTONUP | MM_MOM_OPEN |
MM_JOY1MOVE | MM_MPU401_MIDIN |
MM_JOY1ZMOVE | MM_MPU401_MIDIOUT |
MM_JOY2BUTTONDOWN | MM_PC_JOYSTICK |
MM_JOY2BUTTONUP | MM_SNDBLST_MIDIN |
MM_JOY2MOVE | MM_SNDBLST_MIDIOUT |
MM_JOY2ZMOVE | MM_SNDBLST_SYNTH |
MM_MCINOTIFY | MM_SNDBLST_WAVEN |
MM_MICROSOFT | MM_SNDBLST_WAVEOUT |
MM_MIDI_MAPPER | MM_WAVE_MAPPER |
MM_MIM_CLOSE | MM_WIM_CLOSE |
MM_MIM_DATA | MM_WIM_DATE |
MM_MIM_ERROR | MM_WIM_OPEN |
MM_MIM_LONGDATA | MM_WOM_CLOSE |
MM_MIM_LONGERROR | MM_WOM_DONE |
MM_MIM_OPEN | MM_WOM_OPEN |
Сообщения, не документированные Microsoft
WM_ALTTABACTIVE | WM_ISACTIVEICON |
WM_BEGINDRAG | WM_LBTRACKPOINT |
WM_CONVERTREQUEST | WM_NEXTMENU |
WM_CONVERTRESULT | WM_QUERYDROPOBJECT |
WM_DRAGLOOP | WM_QUERYPARKICON |
WM_DRAGMOVE | WM_SETHOTKEY |
WM_DRAGSELECT | WM_SETVISIBLE |
WM_DROPOBJECT | WM_SIZEWAIT |
WM_ENTERMENULOOP | WM_SYNCPAINT |
WM_ENTERSIZEMOVE | WM_SYNCSTACK |
WM_EXITMENULOOP | WM_SYSTIMER |
WM_EXITSIZEMOVE | WM_TESTING |
WM_FILESYSCHANGE | WM_YOMICHAR |
WM_GETHOTKEY |
Назад |Содержание | Вперед
Сообщения об ошибках
Ниже приводятся сообщения об ошибках, генерируемые Borland С++. В Borland C++ имеются следующие категории ошибок: ошибки этапа выполнения, ошибки этапа компиляции, ошибки компилятора справочников Help, ошибки TLIB и ошибки TLINK. Эти ошибки поясняются в данном приложении. Сообщения об ошибках, выводимые системой интерфейса с пользователем, поясняются в файлах документации на дистрибутивных дисках.
Сначала указывается тип сообщения (например, сообщение этапа компиляции или сообщение утилиты Help). В большинстве пояснений указывается возможная причина ошибки, как можно от нее избавиться или приводится предупреждающее сообщение.
Сообщения об ошибках перечислены в алфавитном порядке, по старшинству символов ASCII; обычно первыми идут сообщения, начинающиеся символами (равенство, запятая, фигурная скобка и т.д.).
Поскольку сообщения, в которых на первом месте выводится имя, специфическое для данной программы, не могут быть расставлены по алфавиту, то они также находятся в начальной части каждого списка сообщений.
Например, если у вас имеется функция С++ goforit, то фактически вы можете получить сообщение об ошибке:
goforit must be declared with no arguments
Для того, чтобы найти описание данного сообщения в этой главе, искать следует сообщение:
функция must be declared with no arguments
в начале списка сообщений об ошибках. Сообщение упорядочивается по алфавиту по слову "must".
Если же некоторая переменная включается в текст сообщения позже (например, "Address of overloaded function функция doesn't match типу"), то такое сообщение можно найти по алфавиту, в данном случае на букву A.
Сообщения об ошибках
Сообщения об ошибках могут генерироваться компилятором, ком- поновщиком, утилитой MAKE или библиотекарем. Кроме того, такие ошибки может генерировать программа на этапе выполнения.
Нефатальные ошибки, генерируемые компилятором, указывают на синтаксические ошибки в программе, ошибки командной строки или ошибки, вызванные ситуациями на диске или в памяти. Компилятор завершает текущую фазу компиляции и прекращает работу. На каждой фазе компиляции (препроцессорная обработка, синтаксический анализ, оптимизация и генерация кода) компилятор пытается найти максимально возможное число ошибок.
Ошибки, генерируемые компоновщиком, не приводят к удалению файлов .EXE или .MAP, однако выполнять такой файл .EXE не следует. При компиляции из IDE сообщения компоновщика об ошибках рассматриваются как фатальные ошибки.
Утилита MAKE генерирует ошибки при неверном синтаксисе или семантических ошибках формирующего файла. Чтобы исправить их, нужно отредактировать формирующий файл.
Сообщения об ошибках на этапе выполнения обычно вызываются логическими ошибками в программе. Нужно исправить причину и перекомпилировать программу.
Сообщения от "мыши"
WM_HSCROLL | WM_MOUSEACTIVATE |
WM_LBUTTONDCLICK | WM_MOUSEMOVE |
WM_LBUTTONDOWN | WM_RBUTTONDBLCLK |
WM_LBUTTONUP | WM_RBUTTONDOWN |
WM_MBUTTONDCLICK | WM_RBUTTONUP |
WM_MBUTTONDOWN | WM_SETCURSOR |
WM_MBUTTONUP | WM_VSCROLL |
WM_BUTTONUP | WM_MOUSEFIRST |
WM_MOUSELAST |
Сообщения печати
DM_COLOR | DM_PAPERLENGTH |
DM_COPIES | DM_PAPERSIZE |
DM_COPY | DM_PAPERWIDTH |
DM_DEFAULTSOURCE | DM_PRINTQUALITY |
DM_DUPLEX | DM_PROMPT |
DM_IN_BUFFER | DM_SCALE |
DM_INPROMPT | DM_SPECVERSION |
DM_MODIFY | DM_TTOPION |
DM_ORIENTATION | DM_UPDATE |
DM_OUT_BUFFER | DM_YRESOLUTION |
DM_OUTDEFAULT |
Сообщения пера
WIN_USER | WM_RCRESULT |
WM_GLOBALRCCHANGE | WM_SKB |
WM_HEDITCTL | WM_PENWINFIRST |
WM_HOOKRCRESULT |