Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

teoria

.pdf
Скачиваний:
47
Добавлен:
31.03.2015
Размер:
289.28 Кб
Скачать

float sum ( float a, float b)

{

return a + b;

}

void main( )

{

cout « sum(3, 5);

}

Возврат из функции выполняется инструкцией return. Ее необязательным элементом является выражение для возвращаемого значения. Инструкция return без выражения просто передает управление вызывающей функции.

Объявление функции можно отделить от ее определения. В этом случае объявление может не содержать имен параметров.

float sum (float, float);

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

void Empty() {return;}

Вызов функции возможен только в составе выражения, но выражение может состоять из единственного вызова функции.

s = sum(x, у);

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

sum(x, у) ;

18. Глобальные и локальные переменные.

Как известно, по месту объявления переменные в языке C++ делятся на три класса: локальные, глобальные и переменные, описанные в списке формальных параметров функции. Все эти переменные имеют разную область видимости.

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

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

Одно и тоже имя может использоваться при определении глобальной и локальной переменной. В этом случае в теле функции локальная переменная имеет преимущество и «закрывает» собой глобальную. Вне этой функции «работает» глобальное описание переменной.

Из функции, где действует локальное описание переменной, можно обратиться к глобальной переменной с таким же именем, используя оператор расширения области видимости

19. Основные файлы проекта в среде С++ Builder.

Файлы, образующие приложение - формы и модули - собраны в проект. Менеджер проектов показывает списки файлов и модулей приложения и позволяет осуществ ять навигацию между ними. Можно вызвать менеджер проектов , выбрав пункт меню View/Project Manager. По умолчанию вновь созданный проект получает имя Project1.cpp.

По умолчанию проект первоначально содержит файлы для одной формы и исходного кода одного модуля. Однако большинство проектов содержат несколько форм и модулей. Чтобы добавить модуль или форму к проекту, нужно щелкнуть правой кнопкой мыши и выбрать пункт New Form из контекстного меню. Можно также добавлять существующие формы и модули к проекту, используя кнопку Add контекстного меню менеджера проектов и выбирая модуль или форму, которую нужно добавить. Формы и модули можно удалить в любой момент в течение разработки проекта. Однако, из-за того, что форма связана всегда с модулем, нельзя удалить одно без удаления другого, за исключением случая, когда модуль не имеет связи с формой. Удалить модуль из проекта можно, используя кнопку Remove менеджера проектов.

20. Структура файла реализации в среде С++ Builder.

Структура файла проекта

Для каждого приложения C++ Builder создается один файл проекта, один make-файл и один файл ресурсов. Файл проекта генерируется при выборе пункта меню File/New Application. Первоначально файлу проекта присваивается по умолчанию имя Project1.cpp. Если в процессе разработки приложения добавляются формы и модули, C++ Builder обновляет файл проекта.

Для просмотра файла проекта следует выбрать пункт меню View/Project Source. Эта операция выполнит загрузку исходного текста файла проекта в редактор кода (рис. 1).

Файл проекта имеет такую же структуру, как и файл модуля. Подобно файлу модуля, это файл исходного кода на языке C++, который компилируется с другими файлами при создании исполняемого файла.

Вфайле проекта имеется определенный набор ключевых элементов:

Директива препроцессора #include <vcl\vcl.h> предназначена для включения в текст проекта заголовочного файла, ссылающегося на описания классов библиотеки компонентов.

Директива препроцессора #pragma hrdstop предназначена для ограничения списка заголовочных файлов, доступных для предварительной компиляции.

Директива USEFORM сообщает, какие модули и формы используются в проекте.

директива USERES компилятора присоединяет файлы ресурсов к выполняемому файлу. При создании проекта автоматически создается файл ресурсов с расширением *.res для хранения курсоров, пиктограммы приложения и др.

Application->Initialize() Это утверждение критично только в случае, если приложение является OLE automation-сервером. В остальных случаях оно фактически ничего не делает.

Application->CreateForm() Это утверждение создает форму приложения. По умолчанию, каждая форма в приложении имеет свое утверждение CreateForm.

Application->Run() Это утверждение запускает приложение (точнее, переводит его в состояние ожидания наступления одного из событий, на которое оно должно реагировать).

Конструкция try...catch используется для корректного завершения приложения в случае возникновения ошибки при инициализации, создании форм, запуске приложения.

Структура модуля

Модули являются основой создания библиотек и приложений в C++ Builder. Модуль содержит исходный текст на языке C++ и первоначально представляет собой файл с расширением *.CPP. В дальнейшем каждый такой файл компилируется в объектный файл с расширением *.OBJ. Объектные файлы, в свою очередь, собираются компоновщиком в выполняемый файл с расширением *.EXE.

При добавлении к проекту новой формы генерируется новый модуль. При добавлении модуля к проекту при помощи выбора пункта меню File/New Unit создается пустая структура модуля, в

которой включены директивы: #include <vcl\vcl.h>; #pragma hdrstop; #include "Unit2.h"

Директива #include "Unit2.h" указывает на то, что в текст модуля должен быть включен соответствующий заголовочный файл.

При создании модуля используются следующие правила:

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

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

Структура h-файла

h-файл генерируется при создании нового модуля. В нем содержится информация о данных и функциях, которые можно использовать в модуле. h-файл для модуля, связанного с формой, содержит описания интерфейсных элементов и других компонентов этой формы и обработчиков событий для них (то есть, в терминологии объектно-ориентированного программирования, описание класса формы). Такие описания автоматически добавляются в h-файл при внесении в форму новых компонентов или генерации новых обработчиков событий. Иными словами, в h- файле содержится интерфейс, а в самом модуле - реализация.

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

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

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

Внутри модуля функции могут быть определены и ссылаться друг на друга в произвольном порядке. Если данный модуль ссылается на другие формы и модули, следует с помощью директивы препроцессора #include включить в него соответствующий h-файл с помощью пункта меню File/Include Unit Hdr... . После этого интерфейсные элементы другого модуля будут доступны в данном модуле.

21.Многофайловые проги Сборка программы

Процесс создания программы из исходных файлов называется сборкой (building). Сборка включает в себя две стадии: компиляцию (compiling) и связывание (linking, другой перевод - компоновка).

Во время компиляции происходит создание объектных файлов (обычно с расширением .obj) из исходных (с расширением .cpp или .cc) и заговочных (с расширением .h). После того

как скомпилировались объектные файлы в дело вступает компоновщик и связывает объектные

и библиотечные файлы (c расширением .lib). В конце сборки, если ни компилятор, ни компоновщик не выдали ошибок, мы получем исполняемый файл (с расширением .exe).

Дополнительные файлы

Создайте новый проект (или даже решение). Создайте в нѐм файл pg. Добавьте ещѐ один исходный файл, например, sub_lib. В первый файл скопируйте всѐ содержимое pseudo_game

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

Заметьте, что файлы никак не связаны друг с другом: не нужно указывать о существовании файла sub_lib.cc в pg.cc, за нас это делает компоновщик.

Заголовочные файлы Для облегчения взаимодействия между файлами используют заголовочные файлы

(с расширением .h). Мы уже сталкивались с ними: с помощью директивы #inlude мы добавляли заголовчные файлы в наши программы. Напомню, что директива #include копирует содержимое заголовочного файла (вообще-то любого файла, который вы укажете), в файл где она вызывается. Угловые скобки говорят компилятору, что заголовочный файл нужно искать в специальных папках.

Давайте добавим заголовочный файл в нашу программу. Назовите его sub_lib.h. Имя этого файла может быть любым и оно необязано совпадать с именем второго исходного файла.

для добавления заголовчного файла выберите File -> New -> File, а в открывшемся окне выберите Header file (.h). Присоедините его к проекту.

В заголовочный файл вынесите все директивы #include, определение структуры tank, определение перечисления cardinal_dirs, определения констант и объявления всех функций. Всѐ это удалите

из первого файла и добавьте только одну строчку:

#inlcude "sub_lib.h";

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

В файл sub_lib.cc добавьте эту же директиву и скопируйте все функции кроме main() из файла pg.cc.

Ну вот в общем и всѐ! Программа работает: мы можем передвигаться по полю, у нас всѐ ещѐ кончается топливо, а наш болван всѐ так же жизнерадостно совершает броуновское движение.

22.Двоичные файлы Двоичные файлы отличаются от текстовых тем, что в них записана информация во

внутреннем машинном представлении. Двоичный файл нельзя просмотреть на экране (вернее, можно просмотреть, но очень сложно понять). Но есть и преимущества - из двоичных файлов можно читать сразу весь массив в виде единого блока. Также можно записать весь массив или его любой непрерывный кусок за одну команду.

При открытии двоичного файла вместо режимов "r‖, "w‖ и "a‖ используют соответственно "rb‖, "wb‖ и "ab‖. Дополнительная буква "b‖ указывает на то, что файл

двоичный (от английского слова binary - двоичный).

При записи информации в двоичный файл символы и числа записываются в виде последовательности байт.

Для того чтобы записать данные в двоичный файл, необходимо:

описать файловую переменную типа FAIL * с помощью оператора FILE *filename, здесь filename — имя переменной, где будет храниться указатель на файл.

открыть файл с помощью функции fopen

записать информацию в файл с помощью функции fwrite

закрыть файл с помощью функции fclose

Для того чтобы считать данные из двоичного файла, необходимо:

описать переменную типа FILE *

открыть файл с помощью функции fopen

считать необходимую информацию из файла с помощью функции fread, при этом следить за тем достигнут ли конец файла.

закрыть файл с помощью функции fclose

Рассмотрим основные функции, необходимые для работы с двоичными файлами.

Для открытия файла предназначена функция fopen.

FILE *fopen(const *filename, const char *mode)

Здесь filename — строка, в которой хранится полное имя открываемого файла,mode - строка, определяющая режим работы с файлом; возможны следующие значения:

«rb» — открываем двоичный файл в режиме чтения;

«wb» — создаем двоичный файл для записи; если он существует, то его содержимое очищается;

«ab» — создаем или открываем двоичный файл для дозаписи в конец файла;

«rb+» — открываем существующий двоичный файл в режиме чтения и записи;

«wb+» — открываем двоичный файл в режиме чтения и записи, существующий файл очищается;

«ab+» — двоичный файл открывается или создается для исправления существующий информации и добавления новой в конец файла.

Функция возвращает в файловой переменной f значение NULL в случае неудачного открытия файла. После открытия файла доступен 0-й его байт, указатель файла равен 0, значение которого по мере чтения или записи смещается на считанное (записанное) количество байт. Текущие значение указателя файла — номер байта, начиная с которого будет происходить операция чтения или записи.

Для закрытия файла предназначена функция fclose:

int fclose(FILE *filename);

Она возвращает 0 при успешном закрытие файла и EOF в противном случае.

Функция remove предназначена для удаления файлов:

int remove(const char *filename);

Эта функция удаляет с диска файл с именем filenema. Удаляемый файл должен быть закрыт. Функция возвращает ненулевое значение, если файл не удалось удалить.

Для переименования файлов предназначена функция rename:

int rename(const char *oldfilename, const char *newfilename);

Первый параметр — старое имя файла, второй — новое. Возвращает 0 при удачном завершении программы.

Чтение из двоичного файла осуществляется с помощью функции fread:

fread(void *ptr, size, n, FILE *filename);

Функция fread считывает из файла filename в массив ptr n элементов размераsize. Функция возвращает количество считанных элементов. После чтения из файла его указатель смещается на n*size байт.

Запись в двоичный файл осуществляется с помощью функции fwrite:

fwrite(const void *ptr, size, n, FILE *filename);

Функция fwrite записывает в файл filename из массива ptr n элементов размераsize. Функция возвращает количество записанных элементов. После записи информации в файл указатель смещается на n*size байт.

Для контроля достижения конца файла есть функция feof:

int feof(FILE *filename);

Она возвращает ненулевое значение если достигнут конец файла.

23.Текстовые файлы

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

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

Для работы с файлами используются специальные типы данных,

называемые потоками. Поток ifstream служит для работы с файлами в режиме чтения, а ofstream в режиме записи. Для работы с файлами в режиме как записи, так и чтения служит поток fstream.

В программах на C++ при работе с текстовыми файлами необходимо подключать библиотеки iostream и fstream.

Для того чтобы записывать данные в текстовый файл, необходимо:

описать переменную типа ofstream.

открыть файл с помощью функции open.

вывести информацию в файл.

обязательно закрыть файл.

Для считывания данных из текстового файла, необходимо:

описать переменную типа ifstream.

открыть файл с помощью функции open.

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

закрыть файл.

Пример использования:

if ( OpenPictureDialog1->Execute() )

{

Image1->Picture->LoadFromFile( OpenPictureDialog1->FileName );

}

Пример использования:

if ( SavePictureDialog1->Execute() )

{

Image1->Picture->SaveToFile( SavePictureDialog1->FileName );

}

24) Editсоздает на форме том для редактирование текстовой строки

Labelсоздает на форме текствую метку или надпись

Buttonслужит для создание в приложении разл кнопок с текст надписью в одной строчке

Formформа, основной компонент приложения. На ней размещаются все другие компоненты.

Св-ва

Autosizeесли уст trueформа сама подгоняет размер под компоненты

Borderwdthтолщина границ формы

Captionназвание формы

Fontтип шрифта

25) компонент TStringGrid (Таблица строк) позволяет отображать текстовые данные в ячейках, расположенных в строках и столбцах. В таблице строк находится много свойств и методов для контроля и отображения данных, так же как и для использования преимуществ их табличного расположения. Этот компонент называют таблицей строк, или просто таблицей. Несмотря на название, таблица строк способна отображать и графическую информацию. Но при этом хранение графических данных и их прорисовка реализуются программистом самостоятельно.

Размеры таблицы определяют свойства ColCount и RowCount типа int, задающие число строк и столбцов соответственно. Значения этим свойствам можно присваивать и динамически в процессе выполнения программы, что приводит к немедленному изменению размеров таблицы. По умолчанию свойства ColCount и RowCount имеют значение 5, что соответствует таблице размером

5*5.

Размеры ячеек в пикселях задают свойства DefaultColWidth и DefaultRowHeight типа int. Значения этих свойств распространяются на все ячейки сетки, хотя для отдельных строк и столбцов можно задать свои размеры. По умолчанию свойству DefaultColwidth задано значение 64 пикселя, а

свойству DefaultRowHeight — 24 пикселя.

Свойства ColWidths [int Index] и RowHeights [int Index] типа int позволяют задать в пикселях ширину отдельного столбца и высоту строки, позиция которых определяется параметром index.

В программе изменить размер таблицы можно следующим образом. StringGridl. ColCount++

26) Компоненты OpenDialog - диалог «Открыть файл» и SaveDialog - диалог «Сохранить файл как...» используются чаще всего, в большинстве приложений.

Все свойства этих компонентов одинаковы, только их смысл несколько различен для открытия и сохранения файлов. Основное свойство, в котором возвращается в виде строки выбранный пользователем файл — FileName. Значение этого свойства можно задать и перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла.

Свойство FilterIndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение FilterIndex=1 задает по умолчанию первый фильтр.

Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.

Свойство DefaultExt определяет значение расширения файла по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать значение DefaultExt, то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение.

Свойство Title позволяет задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе. Но можно задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, «Укажите имя и тип сохраняемого файла».

Свойство Options определяет условия выбора файла. Множество опций, которые можно установить программно или во время проектирования

27)Графика в С++ Рисование обеспечивается объектом canvas. В частности форма имеет сво-во canvas. Этот объект представляет сбой рабочую часть окна, на которой осущ рисование. Св-ва: penперо для рисования линий. Color. Width. Style. Brushкисть для закр внутр обл замк фигур.

Color. style

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