Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка по программированию СУА.doc
Скачиваний:
12
Добавлен:
11.11.2019
Размер:
1.3 Mб
Скачать

Дополнительные директивы препроцессора

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

Директива #error выдает сообщение и завершает компиляцию. Например, конструкция

#ifndef unix

#error "Программу можно компилировать

только для Unix!"

#endif

выдаст сообщение и не даст откомпилировать исходный файл, если макроимя unix не определено.

Директива #line изменяет номер строки и имя файла, которые хранятся в предопределенных макроименах __LINE__ и __FILE__.

Кроме директив, у препроцессора есть одна операция ##, которая соединяет строки, например A ## B.

7 Объектно-ориентированное программирование

7.1 Основные понятия объектно-ориентированного программирования

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

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

class Complex {

public:

int real; // вещественная часть

int imaginary; // мнимая часть

void Add(Complex x);

// прибавить комплексное число

};

Приведенный выше пример - упрощенное определение класса Complex, представляющее комплексное число. Комплексное число состоит из вещественной части - целого числа real и мнимой части, которая представлена целым числом imaginary. real и imaginary - это атрибуты класса. Для класса Complex определена одна операция или метод - Add.

Определив класс, мы можем создать переменную типа Complex:

Complex number;

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

number.real = 1;

number.imaginary = 2;

Операция "." обозначает обращение к атрибуту объекта. Создав еще один объект класса Complex, мы можем прибавить его к первому:

Complex num2;

number.Add(num2);

Как можно заметить, метод Add выполняется с объектом. Имя объекта (или переменной, содержащей объект, что, в сущности, одно и то же), в данном случае, number, записано первым. Через точку записано имя метода - Add с аргументом - значением другого объекта класса Complex, который прибавляется к number. Методы часто называются сообщениями. Но чтобы послать сообщение, необходим получатель. Таким образом, объекту number посылается сообщение Add с аргументом num2. Объект number принимает это сообщение и складывает свое значение со значением аргумента сообщения.