Конструкторы в 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)
— конструктор перемещения.