Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы ООП.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
203 Кб
Скачать
☆
  1. Абстрактные типы данных

Типы данных, создаваемые пользователем (программистом), называются пользовательскими типами данных. Пользовательский тип данных с полно-стью скрытой (инкапсулированной) внутренней структурой называется абст-

рактным типом данных (АТД).

В С++ АТД реализуется с помощью классов, в которых нет открытых чле-нов-данных, то есть вся структура этих классов скрыта от внешнего пользователя.

  1. Классы и объекты С++

Центральным понятием ООП является класс. Класс используется для опи-сания типа, на основе которого создаются объекты (переменные типа класс).

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

  1. Синтаксис описания класса

class Имя_класса { определение_членов_класса };

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

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

  1. Управление доступом к членам класса

Принцип инкапсуляции обеспечивается вводом в класс областей доступа:

  • private (закрытый, доступный только собственным методам)

  • public(открытый, доступный любым функциям)

  • protected (защищенный, доступный только собственным методам и

методам производных классов)

Члены класса, находящиеся в закрытой области (private), недоступны для использования со стороны внешнего кода. Напротив, члены класса, находящиеся в открытой секции (public), доступны для использования со стороны внешнего кода. При описании класса каждый член класса помещается в одну из перечис-ленных выше областей доступа следующим образом:

class Имя_класса { private:

определение_закрытых_членов_класса public:

определение_открытых_членов_класса protected:

определение_защищенных_членов_класса

…

};

Порядок следования областей доступа и их количество в классе – произ-вольны.

Служебное слово, определяющее первую область доступа, может отсутст-вовать. По умолчанию эта область считается private.

    • закрытую (private) область обычно помещаются информационные члены, а

  • открытую (public) область – методы класса, реализующие интерфейс объектов класса с внешней средой. Если какой-либо метод имеет вспомогательное значе-ние для других методов класса, являясь подпрограммой для них, то его также следует поместить в закрытую область. Это обеспечивает логическую целост-ность информации.

После описания класса его имя можно использовать для описания объектов этого типа.

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

операции выбора члена класса ‘.’.

Если работа с объектом выполняется с помощью указателя на объект, то доступ к соответствующим членам класса осуществляется на основе указателя на член класса‘->’:

class Х { public:

char c; int f(){…}

};

int main () {

  • x1;

  • & x2 = x1;

  • * p = & x1; int i, j, k; x1.c = ‘*’; i = x1.f(); х1.с = '+'; j = x2.f(); x1.c = ‘#’; k = p -> f();

…

}

Объекты класса можно определять совместно с описанием класса:

class Y {…} y1, y2;

  1. Классы и структуры С++

Синтаксис класса в С++ совпадает с синтаксисом структуры С++: struct Имя_структуры { определение_членов_структуры };

Класс С++ отличается от структуры С++ только определением по умолча-нию первой области доступа в их описании (а также определением по умолчанию способа наследования, см. раздел 10.3):

  • для структур умолчанием является открытый доступ (public)

  • для классов умолчанием является закрытый доступ (private).

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

В C++ объекты можно создавать также на основе структур и объединений

(union).

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

цип инкапсуляции.