C++. Введение в классы и объекты. Конструкторы и деструкторы, страница 3

  • Конструктор – метод класса, который автоматически вызывается после выделения памяти под объект (после создания объекта).
  • Деструктор – метод класса, который автоматически вызывается перед освобождением памяти из под объекта (перед уничтожением объекта).
  • Виды конструкторов:
  • Конструкторы по умолчанию (без параметров);
  • Конструкторы с параметрами;
  • Конструкторы копирования.

25.11.2016

12

  • Конструктор используется для инициализации полей объекта, а также для выделения памяти для динамических полей объекта (т. е. полей, память под которые необходимо выделять на этапе выполнения программы).
  • Основные свойства конструктора: имеет тоже имя, что и класс; не может возвращать значение.
  • Конструкторы можно перегружать для различных вариантов инициализации объектов класса.
  • Замечание. В С++ методы класса могут быть перегружены, т. е. иметь одинаковые имена, но разные списки параметров.
  • Если в классе отсутствует конструктор, то компилятором автоматически создается конструктор по умолчанию (конструктор без параметров), который не выполняет инициализацию полей объекта класса.
  • Если класс имеет конструктор с параметрами, то конструктор без параметров (конструктор по умолчанию) автоматически не создается, поэтому, если он необходим, то его необходимо создавать явно (т. е. перегрузить конструктор с параметрами).
  • Деструктор используется для выполнения тех действий, которые необходимо выполнить перед уничтожением объекта, например, освобождает память, выделенную конструктором для динамических полей. Имя деструктора совпадает с именем класса и начинается с символа тильда (~). Деструктор не имеет параметров и не может возвращать значение. Если деструктор не объявлен явно, он, как и конструктор, создается компилятором как пустой метод.
  • Класс может иметь только один деструктор, перегрузка деструкторов запрещена.
  • Замечание: В примере 2 (на след. слайде) модификатор const в параметрах конструктора защищает эти параметры от случайных (ненамеренных) изменений. В случае изменения этих параметров компилятор выдает сообщение.

25.11.2016

13

  • Пример2: Объявление класса с конструкторами и деструктором
  • // cat.h
  • // объявление класса
  • class Cat
  • { private: int age; // возраст
  • char name[20]; // кличка
  • public:
  • Cat(); //конструктор_1
  • Cat(const char Name[], int Age); //конструктор_2
  • ~Cat(){}; //деструктор
  • int getAge();
  • void setAge(int Age);
  • void Meow();
  • };

25.11.2016

14

  • Пример2: Определение конструкторов и других методов класса
  • // cat.cpp
  • #include "cat.h"
  • #include <iostream>
  • #include <cstring>
  • using namespace std;
  • Cat::Cat(){ strcpy(name, "Cat"); age = 1;}
  • Cat::Cat(const char Name[], int Age)
  • {strcpy(name, Name); age = Age;}
  • int Cat::getAge(){ return age;}
  • void Cat::setAge(int Age){ age = Age;}
  • void Cat::Meow()
  • { cout << name << ": ";
  • for (int i = 1; i <= age; i++)
  • cout << "Мяу ";
  • cout << "\n" << "\n" ;
  • }

25.11.2016

15

  • Варианты создания статического объекта:
  • - имя_класса имя_объекта;
  • - имя_класса имя_объекта(список параметров конструктору);
  • Варианты создания динамического_объекта:
  • - имя_класса * имя_ук = new имя_класса;
  • - имя_класса * имя_ук = new имя_класса (список параметров конструктору);
  • Доступ к полям и методам, объявленным в секции public:
  • имя_объекта.имя_поля
  • имя_объекта.имя_метода()
  • указатель_на_объект -> имя_поля
  • указатель_на_объект -> имя_метода()
  • Указатель this
  • int Cat::getAge(){ return this->age;}
  • void Cat::setAge(int age){ this->age = age;}

25.11.2016

16