Конструктор (програмування)

метод в об'єктно-орієнтованому програмуванні

В об'єктно-орієнтованому програмуванні конструктор класу (від англ. constructor, деколи скорочують ctor) — спеціальний метод класу, який автоматично викликається при створенні об'єкта.

Призначення ред.

Призначення конструктора — встановити початковий стан об'єкта шляхом ініціалізації атрибутів об'єкта та визначити інваріант класу.

В більшості мов програмування конструктор схожий з іншими методами, але відрізняється тим, що не має явним чином визначеного типу даних, що повертаються, не успадковується і, здебільшого, має різні правила для модифікаторів. Конструктори часто виділяються тим, що мають однакове ім'я з іменем класу, в якому їх оголошено.

В більшості мов програмування конструктор може бути перевантаженим, що дозволяє використовувати кілька конструкторів в одному класі. Деякі мови розрізняють кілька особливих типів конструкторів[джерело?]:

  • Конструктор за умовчанням — конструктор, що не приймає аргументів, або всі аргументи якого мають значення за умовчанням.
  • Конструктор копіювання — конструктор, що приймає як аргумент об'єкт того ж класу, або посилання на нього.

Види конструкторів ред.

class Complex {
 public:
  // Типовий конструктор
   Complex(double i_re = 0, double i_im = 0) : re(i_re), im(i_im) {}

  // Конструктор копіювання
  Complex(const Complex &obj) { re = obj.re; im = obj.im; }
  private:
    double re, im;
};

Синтаксис ред.

С++ ред.

Ім'я конструктора в С++ повинно збігатися з ім'ям класу. Допускається використовувати кілька конструкторів з однаковим ім'ям, але з різними параметрами.

class ClassWithConstructor {
 public:
  /* Ініціалізація внутрішнього об'єкта за допомогою конструктора */
  ClassWithConstructor(float parameter): object(parameter) {} /* виклик конструктора AnotherClass(float); */
 private:
  AnotherClass object;
};

Python ред.

В мові Python конструктором є метод класу з ім'ям __init__ . Крім того потрібно не забувати, що першим аргументом будь-якого методу класу повинен бути вказівник на контекст класу self.

class ClassWithConstructor:

    def __init__(self):
        """This method is constructor."""
        pass

Delphi ред.

В Delphi, на відміну від C++, для оголошення конструктора служить ключове слово constructor. Ім'я конструктора може бути будь-яким, але рекомендується вживати назву Create.

  TClassWithConstructor = class
    public
    constructor Create;
  end;

Java ред.

Деякі відмінності між конструкторами та іншими методами Java:

  • Конструктори не можуть напряму викликатись з інших методів (необхідно використовувати ключове словоnew)
  • Конструктори можуть викликатись з інших конструкторів того ж класу, або з конструкторів класів, що є його прямими нащадками (в першому випадку вживається конструкція this(arg1, arg2...), в другому — super(arg1, arg2...) і цей виклик має бути першою інструкцією в конструкторі, що робить виклик).
  • Конструктори не можуть мати тип synchronized, final, abstract, native або static.
  • Конструктори завжди виконуються в тому ж потоці.
public class Example {
  // Типовий конструктор
  public Example() { this(1); }

  // Перевантаження конструктора
  public Example(int input) { data = input; }

  private int data;
}
// код, який ілюструє створення об'єкта конструктором
Example e = new Example(42);

C# ред.

class myClass
{
  private int mA;
  private string mB;

  public myClass(int a, string b)
  {
    mA = a;
    mB = b;
  }
}
myClass c = new myClass(42, "string");

PHP ред.

В PHP (починаючи з версії 5) конструктор — це метод __construct(), який автоматично викликається ключовим словом new після створення об'єкта. Переважно використовується для виконання різних ініціалізацій.

class Person
{
   private $name;

   function __construct($name)
   {
       $this->name = $name;
   }
 
   function getName()
   {
       return $this->name;
   }
}

Тим не менше, конструктор в РНР версії 4 - метод класу з ім'ям цього ж класу

class Person
{
   private $name;

   function Person($name)
   {
       $this->name = $name;
   }
 
   function getName()
   {
       return $this->name;
   }
}

Посилання ред.

Див. також ред.