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

Класс и атд

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

АТД, например строка, является описанием идеального, всем известного поведения типа. Пользователь строки знает, что операции, такие как кон­катенация или печать, имеют определенное поведение. Операции конкатенации и печати называются методами. Конкретная реализация АТД может иметь ограниче­ния; например, строки могут быть ограничены по длине. Эти ограничения влияют на открытое всем поведение. В то же время, внутренние или закрытые детали реализа­ции не влияют прямо на то, как пользователь видит объект.

В C++ для обеспе­чения инкапсуляции используются объявления класса и структуры (class и struct) в сочетании с ключевыми словами доступа private (закрытый), protected (защищенный) и public (открытый).

Классификация методов

Конст­руктор - функция-член, единствен­ная работа которой заключается в инициализации объекта класса. Конструкторы вызываются всякий раз, когда создается объект данного класса.

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

Деструктор — это фун­кция-член, задача которой состоит в том, чтобы завершить существование переменной класса. Этот процесс часто предполагает динамическое освобождение памяти.

Модификатор - изменяет состояние объекта.

Селектор - дает доступ к состоянию, но не изменяет его.

Действия над объектами

  1. Создание

  2. Инициализация

  3. Обработка

  4. Разрушение

23 . Классы: компонентные данные, компонентные функции, способы задания доступа, синтаксическая структура определения класса, объявление, определение и инициализация объектов, объекты объявленные как константы, область видимости класса, указатель this, компонентные функции типа static и const (статические и постоянные компонентные функции), тестирование класса.

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

В C++ классы вводятся ключевым словом class. Они являются формой структуры, права доступа к членам которой по умолчанию определены как закрытые (private). Таким образом, srtuct и class взаимозаменяемы, но необходимо определять надлежащие права доступа.

Давайте перепишем пример с комплексными числами:

struct complex { public:

r. double i]

void assign (double);

void print(){cout << real << " + " << imag « "i " ; } }

private:

double real, imag;};

inline void complex::assign(double r, double i = 0.0){real = r; imag = i;}

А вот эквивалентное представление класса:

В файле complex2.cpp

class complex {

public://стиль «должен знать»

void assign (double r, double i); //см. ниже

void print() { cout << real << " + " << imag « "i ";}

private:

double real, imag;

inline void complex::assign(double r, double i = 0.0) {real = r;imag = i;}

Также возможно было бы:

class complex {

double real, imag;

public:

void assign (double r, double i);

void print(){ cout << real << " + " << imag « "i ";}

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

Здесь используется тот факт, что по умолчанию доступ к членам класса является закрытым. Мы также будем явно использовать ключевые слова доступа и в тексте программы сперва располагать открытые члены, а затем — закрытые. Мы называем такой стиль «должен знать» («need-to-know» style), потому что все должны знать об открытом интерфейсе, но только поставщику класса необходимы сведения о закрытых деталях его реализации.