Конструкторы в C++ — специальные методы класса (или структуры), которые вызываются при создании объекта для инициализации его данных-членов.
Для аналогии можно вспомнить инициализацию в Python:
class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
 
x = Complex(3.0, -4.5)
x.r, x.iТипы конструкторов:
- Конструктор по умолчанию (Default constructor): Не принимает аргументов.
- Параметризованный конструктор (Parameterized constructor): Принимает один или несколько аргументов.
- Конструктор копирования (Copy constructor): Принимает объект того же класса по константной ссылке.
- Конструктор перемещения (Move constructor): Принимает объект того же класса по rvalue-ссылке.
Конструкторы работают в паре со списками инициализации, которые указывается после заголовка конструктора и перед телом конструктора, инициализаторы разделяются запятыми.
Пример:
#include <iostream>
using namespace std;
 
struct Person {
    string name;
    int age;
 
    // Конструктор по умолчанию
    Person() : name("Unknown"), age(0) {}
 
    // Параметризованный конструктор
    Person(string n, int a) : name(n), age(a) {}
 
    // Конструктор копирования
    Person(const Person &other) : name(other.name), age(other.age) {}
 
    // Конструктор перемещения. Теперь в оригинале не будет имени
    Person(Person &&other) noexcept : name(move(other.name)), age(other.age) {
        other.age = 0; // Обнуление данных в оригинальном объекте.
    }
};
 
int main() {
    Person p1; // вызов конструктора по умолчанию
    Person p2("John", 30); // вызов параметризованного конструктора
    Person p3(p2); // вызов конструктора копирования
    Person p4(move(p2)); // вызов конструктора перемещения
 
    cout << "Name: " << p1.name << ", Age: " << p1.age << endl;
    cout << "Name: " << p2.name << ", Age: " << p2.age << endl; // p2 теперь пустой
    cout << "Name: " << p3.name << ", Age: " << p3.age << endl;
    cout << "Name: " << p4.name << ", Age: " << p4.age << endl;
    
    return 0;
}В этом примере:
- Person()— конструктор по умолчанию.
- Person(string n, int a)— параметризованный конструктор.
- Person(const Person &other)— конструктор копирования.
- Person(Person &&other)— конструктор перемещения.