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

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

Часто во время создания объекта его элементам необходимо присвоить начальные значения. Сделать это непосредственно в определении класса нельзя, например, следующее описание приведет к ошибке компиляции:

class СWorld
{
     unsigned long objectsn=0, // ошибка
                        time = 0;  //  ошибка
};
Рисунок 4

Оставлять переменные класса непроинициализированными крайне нежелательно,  так как в этом случае может возникнуть ситуация некорректной работы программы.

Избежать подобной ситуации можно, например, написав функцию, которая будет присваивать нулевые значения элементам objectsn и time, и вызывать эту функцию каждый раз сразу после объявления объекта. Но в языке С++ есть такой механизм как конструкторы. Конструктор (construct - создавать) - это специальная функция-член класса с тем же именем, что и класс.

class СWorld
{
    public:
        CWorld(); // конструктор класса CWorld    
};
CWorld::CWorld()
{
 time = 0;
 objectsn = 0;
}
Рисунок 5- Пример конструктора класса CWorld

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

Конструктор без параметров называют конструктором по умолчанию. Такой конструктор обычно присваивает переменным-членам класса наиболее часто используемые значения. В описанном выше примере класса CWorld используется конструктор по умолчанию. В нем переменным time и objectsn присваиваются нулевые значения. Таким образом, после создания экземляра объекта типа CWorld, он будет содержать допустимые значения, а не "мусор". 

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

Если класс имеет конструктор по умолчанию (определенный программистом или созданный компилятором), можно определить объект класса без передачи параметров, например :

CWorld world;
Рисунок 6- Пример определения объекта класса CWorld без передачи параметров

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

Следующая команда, например, не создает объект типа my_Time, с вызовом конструктора по умолчанию а является определением функции world, которая не принимает параметров и возвращает объект типа CWorld, 

CWorld world();
Рисунок 7- Пример определения объекта класса CWorld с вызовом конструктора по умолчанию

Для каждого класса может существовать только один конструктор по умолчанию.

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

class CObject 

 {
 float x;
 float y;
 CObject(float a, float b);

 }; 

 СObject::CObject(a,b)
 {
  x = a;
  y = b;
 }
Рисунок 8- Пример определения для класса CWorld конструктора с параметрами