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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

В об'єктно-орієнтованому програмуванні конструктор класу (від англ. 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;
   }
}

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

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