Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++ 3 minimax.docx
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
99.99 Кб
Скачать

4) Понятие класса. Описание класса (Паскаль). Поля и методы. Пример

Пример объявления простого класса:

type

TPerson = class (TObject) // TPerson – имя класса,

private

fname: string[15]; faddress: string[35]; // fname и faddress – имена полей,

public

procedure Show; // show – имя метода.

end; // Согласно принятому в Delphi соглашению, имена полей должны начинаться с буквы f (от слова field – поле).

Классы могут быть объявлены в секции интерфейса (interface) или в секции реализации (implementation) модуля. Определение классов внутри подпрограмм и других блоков не допускается.

14) Конструктор и деструктор, их свойства (С++).

В каждом классе должен быть хотя бы один метод, который предназначен для инициализации объекта - конструктор.

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

Существует три типа конструкторов:

  • конструктор с параметрами, используется для инициализации объекта требуемыми значениями;

  • конструктор без параметров, используется для создания «пустого» объекта;

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

Конструктор без параметров и конструктор копирования создаются по умолчанию.

Основные свойства конструкторов:

  • Конструктор не возвращает значение, даже типа void.

  • Нельзя получить указатель на конструктор.

  • Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).

  • Конструктор, вызываемый без параметров, называется конструктором по умолчанию.

  • Параметры конструктора могут иметь любой тип, кроме этого же класса.

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

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

Этот конструктор вызывается в тех случаях, когда новый объект создается путем копирования существующего:

    1. При описании нового объекта с инициализацией другим объектом;

    2. При передаче объекта в функцию по значению;

    3. При возврате объекта из функции.

Если программист не указал ни одного конструктора копирования, компилятор создает его автоматически. Такой конструктор выполняет поэлементное копирование полей.

3 случая вызова конструктора копирования

  1. при описании нового объекта с инициализацией другим объектом;

  2. при передаче объекта в функцию по значению;

void print_person(person a ) //объект передается по значению

{a.print();}

  1. при возврате объекта из функции;

person set_inf()//объект передается по значению

{person s;//создается временный объект

s.set_person("Sidorov",25); //объект возвращается как значение функции

return s;}

class bibl

{ char* name, avtor;

float stoim;

public:

bibl();//конструктор без параметра

bibl (char*, float);//конструктор с параметром

bibl(const bibl&);//конструктор копирования

Вызывается конструктор так:

bibl k1("Айвенго", 400); // вызов конструктора с параметрами

cout << k1.Getname() <<k1.Getavtor() <<k1.Getstoim()<<endl;; // вывод значений на монитор

bibl k2; // вызов конструктора без параметров

k2.Setname("Клеймо"); // заполнение поля name

k2.Setavtor("Петров"); // заполнение поля kol

k2.Setstoim(250); // заполнение поля stoim

cout << k2.Getname()<<k2.Getavtor() <<k2.Getstoim()<<endl;// вывод значений на монитор

bibl k3 = k2; // вызов конструктора копирования

  • Деструктор – это особый вид метода, применяющийся для освобождения ресурсов, выделенных конструктором объекту. Деструктор вызывается автоматически, когда объект удаляется из памяти:

    • для локальных объектов это происходит при выходе из блока, в котором они объявлены;

    • для глобальныхпри выходе из main;

    • для динамических объектов деструктор вызывается неявно при использовании операции delete.

  • Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса:

~person()

Свойства деструктора:

  • не имеет аргументов и возвращаемого значения;

  • не наследуется;

  • не может быть объявлен как const или static;

  • может быть виртуальным.

  • Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор.

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

  • Указатель на деструктор определить нельзя.

  • Деструктор для рассматриваемого примера будет выглядеть так:

person::~person() {delete [] name;}

  • Явно вызывать деструктор объекта не рекомендуется.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]