Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по инфе 3 семестр.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
203 Кб
Скачать
☆

Деструктор

Для разрушения объекта используется метод, называемый деструктором. Для деструктора, также как и конструктора, не указывается тип возвращаемого значения, имя совпадает с именем класса, только перед именем помещается знак ~ (тильда).

Реализация

// по умолчанию

Person::~Person ()

{

}

// для рассматриваемого примера

Person::~Person ()

{

delete[ ] Name;

}

Явный вызов деструктора не требуется, так как его вызов будет выполнен автоматически в точке программы, где объект должен быть разрушен в соответствии с его временем жизни.

Деструктор не имеет параметров и включается в раздел public

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

В основном деструкторы применяются, если у класса имеется динамичные поля.

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

Инкапсуляция – это принцип ООП, объединяющий в одном классе данные и методы, манипулирующие этими данными и защищающие данные класса от внешнего воздействия.

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

При этом класс представляется в виде:

class Printer

{

char model[15];

int year;

int status;

int is_on; //Принтер включен (0 – нет,1 – да)

public:

Printer(char* _model, int _year);

void on_off(); //Включение/выключение питания

void set_print();

void stop_print();

void show();

};

//Конструктор

Printer :: Printer(char* _model, int _year)

{

strcpy(model, _model);

year=_year;

status=0;

is_on=0; //Принтер отключен по умолчанию

}

void Printer :: on_off()

{

//Метод моделирует нажатие кнопки включения питания:если оно выключено, то произойдет включение, и наоборот; одновременно при любых переключениях питания принтер оказывается в состоянии готовности печать не ведет

is_on=!is_on;

status=0;

}

 

void Printer :: set_print()

{

If (is_on) status=1; //Принтер будет печатать,

если он включен

}

 

void Printer :: stop_print()

{

If (status) status=0; //Принтер остановится,

если он до того печатал

}

 

void Printer :: show()

{

cout << "Модель: " << model << "Год выпуска: " << year << endl;

if (is_on)

{

cout << "Принтер включен";

if (status) cout << "Состояние: печатает";

else cout << "Состояние: готов к работе";

}

else cout << "Принтер выключен";

cout << endl;

}

Класс запрещает прямой доступ к своим переменным состояния, поэтому не удастся реализовать недопустимое состояние is_on=0, status=1. Методы set_print(),stop_print(), on_off(), предоставляющие доступ к свойствам объекта, реализованы так, что также исключают это состояние объекта. В этом и заключается смысл понятия инкапсуляции.