Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
39
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Часть I. Структурное программирование

#include <iostream.h> int main(){

enum paytype {CARD. CHECK}; paytype ptype; union payment{ char card[25]; long check; } info;

/* присваивание значений info и ptype */ switch (ptype){

case CARD: cout « "Оплата по карте: " « info.card; break; case CHECK: cout « "Оплата чеком: " « info.check; break;

} return 0;

}

Объединение часто используют в качестве поля структуры, при этом в структуру удобно включить дополнительное поле, определяющее, какой именно элемент объединения используется в каждый момент. Имя объединения можно не указывать, что позволяет обращаться к его полям непосредственно:

#include <iostream.h> int main(){

enum paytype {CARD. CHECK}; struct{

paytype ptype; union{

char card[25]; long check;

}: } info;

... /* присваивание значения info */ switch (info.ptype){

case CARD: cout « "Оплата по карте: " « info.card; break;

case CHECK: cout « "Оплата чеком: " « info.check; break;

}

return 0;

}

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

struct 0ptions{

bool centerX:l;

bool centerY:l;

unsigned int shadow:2;

unsigned int palette:4; }:

Глава 1. Базовые средства языка C++

71

union{

unsigned char ch;

Options bit; Joption = {0xC4}; cout « option.bit.palette; option.ch &= OxFO; // наложение маски

По сравнению со структурами на объединения налагаются некоторые ограничения. Смысл некоторых из них станет понятен позже:

  • объединение может инициализироваться только значением его первого элемента;

  • объединение не может содержать битовые поля;

  • объединение не может содержать виртуальные методы, конструкторы, деструкторы и операцию присваивания;

  • объединение не может входить в иерархию классов.

Глава 2

Модульное программирование

Модульность фундаментальный аспект всех успешно работающих крупных систем.

Б. Страуструп

С увеличением объема программы становится невозможным удерживать в памяти все детали. Естественным способом борьбы со сложностью любой задачи является ее разбиение на части. В C++ задача может быть разделена на более простые и обозримые с помощью функций, после чего программу можно рассматривать в более укрупненном виде — на уровне взаимодействия функций. Это важно, поскольку человек способен помнить ограниченное количество фактов. Использование функций является первым шагом к повышению степени абстракции программы и ведет к упрощению ее структуры.

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

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

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