Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
225.79 Кб
Скачать

5. Понятие классов и экземпляров классов.

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

6. Описание классов(class, struct, union).

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

struct Array

{

double* val;

int len;

};

void FreeArray(const struct Array*);

void AllocArray(const struct Array*, int len);

double Elem(const struct Array*, int i);

void ChangeElem(const struct Array*, int i, double x);

В отличие от типа структура (struct) языка Си, состоящей только из полей, класс (class) Си++ состоит из полей и функций-членов (member functions). Поля бывают публичными (public), защищёнными (protected) и собственными (приватными, private). В Си++ тип структура аналогичен типу класс, отличие в том, что по умолчанию поля и функции-члены у структуры публичные, а у класса - собственные.

class Array {

public:

void Alloc(int new_len);

void Free();

inline double Elem(int i);

inline void ChangeElem(int i, double x);

protected:

int len;

double* val;

};

Union - представляет собой структуру, члены которой расположены по одному и тому же адресу. Поэтому размер объединения равен размеру его наибольшего члена. В любой момент времени объединение хранит значение только одного из членов.

union Some {

int i;

double a;

};

7. Вложенные классы.

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