title: Constructor
text: In objectgeoriënteerde programmeertalen is een constructor een bepaald soort methode van een klasse die uitgevoerd wordt wanneer een object van de klasse wordt aangemaakt.
  
  Een constructor is vergelijkbaar met een methode maar het levert geen waarde op en het kan niet overgeërfd worden. De scope van een constructor kan ook anders zijn: in bepaalde talen, zoals Java, kan de constructor niet zelf aangeroepen worden. Constructors hebben  vaak dezelfde naam als de klasse waartoe ze behoren. Het doel van een constructor is het initialiseren van de velden van een klasse en het vastleggen van een invariant voor de klasse (indien mogelijk, anders faalt het aanmaken van het object). Een correcte constructor levert een object in een 'geldige' toestand op.
  
  In de meeste programmeertalen is overloading van de constructor mogelijk: een klasse kan meerdere constructors hebben met dezelfde naam maar met verschillende parameters.
  
  De tegenhanger van de constructor is de destructor die uitgevoerd wordt wanneer het object wordt vernietigd.
  
  Copy constructor
  
  Een copy constructor is een constructor die gebruikt kan worden om een kopie van een bestaand object te maken. Deze constructor krijgt als argument dat object mee en de constructor neemt de waarden van de velden van dat object over.
  
  Een voorbeeld van een copy constructor:
  
  public class Vector {
      public int x;
  
      public int y;
  
      public int z;
  
      // copy constructor
      public Vector(Vector vector) {
          this.x = vector.x;
          this.y = vector.y;
          this.z = vector.z;
      }
  }
  
  Deze constructor kan als volgt gebruikt worden:
  
  Vector p = new Vector()
  p.x = 1;
  p.y = 1;
  p.z = 1;
  
  Vector q = new Vector(p)
  q.x = 2;
  
  Na het uitvoeren van de eerste vier regels bevat de vector p de waarde 1 voor elk van de velden x, y en z. Door het gebruiken van de copy constructor wordt een vector q aangemaakt die aanvankelijk de waarden van vector p heeft: 1 voor x, y en z. Daarna wordt de waarde van x gelijk aan 2. Na afloop heeft q de waarden x = 2, y = 1, z = 1 en p heeft de waarden x = 1, y = 1, z = 1. De velden van vector p zijn dus niet gewijzigd aangezien q, de kopie van p, wordt gewijzigd.
  
  Voorbeeld
  
  Java
  
  Enkele verschillen in Java tussen constructoren en methoden zijn:
  
  Constructoren leveren geen waarde op
  Constructoren kunnen niet direct aangeroepen worden (met new wordt een constructor uitgevoerd)
  Constructoren kunnen niet synchronized, final, abstract of static zijn
  Constructuren worden altijd uitgevoerd door dezelfde thread
  
  public class Voorbeeld
  {
    // declaratie van een veld
    private int data;
  
    // definitie van een constructor
    public Voorbeeld()
    {
       this(1);
    }
  
    // constructor overloading
    public Voorbeeld(int input)
    {
       data = input;
    }
  }
  
  // instantiatie van een object van de bovenstaande klasse
  Voorbeeld e = new Voorbeeld(42);
  
  Objectgeoriënteerd programmeren