РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
688 of 815 menu

Оператор присваивания

Оператор присваивания = используется для копирования значения из правого операнда в левый. В контексте классов этот оператор может быть перегружен для определения того, как объекты одного класса должны копироваться друг в друга. По умолчанию компилятор создает оператор присваивания, который выполняет поверхностное копирование всех нестатических членов класса. Если класс управляет ресурсами (например, динамической памятью), необходимо перегрузить оператор присваивания, чтобы избежать двойного освобождения памяти или утечек. В первый параметр (неявный) передается объект, который нужно изменить (левый операнд), а во второй (явный) - объект, из которого копируется значение (правый операнд).

Синтаксис

ClassName& operator=(const ClassName& other) { // copy data from other return *this; }

Пример

Давайте рассмотрим класс, который управляет динамическим массивом, и перегрузим для него оператор присваивания, чтобы избежать проблем с памятью:

#include <iostream> using namespace std; class Array { private: int* data; int size; public: Array(int s) : size(s) { data = new int[size]; for (int i = 0; i < size; i++) { data[i] = 0; } } // Copy assignment operator Array& operator=(const Array& other) { if (this != &other) { delete[] data; size = other.size; data = new int[size]; for (int i = 0; i < size; i++) { data[i] = other.data[i]; } } return *this; } void set(int index, int value) { if (index >= 0 && index < size) { data[index] = value; } } int get(int index) const { return data[index]; } ~Array() { delete[] data; } }; int main() { Array a(3); a.set(0, 1); a.set(1, 2); a.set(2, 3); Array b(3); b = a; // using copy assignment operator cout << b.get(0) << " " << b.get(1) << " " << b.get(2) << endl; return 0; }

Результат выполнения кода:

1 2 3

Пример

Давайте посмотрим, как работает оператор присваивания по умолчанию для класса без динамических ресурсов:

#include <iostream> using namespace std; class Point { public: int x; int y; Point(int xVal, int yVal) : x(xVal), y(yVal) {} }; int main() { Point p1(1, 2); Point p2(3, 4); p2 = p1; // default copy assignment cout << p2.x << " " << p2.y << endl; return 0; }

Результат выполнения кода:

1 2

Смотрите также

  • оператор operator,
    который используется для перегрузки операторов
  • конструктор копирования copy-ctor,
    который создает объект как копию другого
  • конструктор перемещения move-ctor,
    который создает объект путем перемещения ресурсов
  • оператор перемещающего присваивания move-assign,
    который перемещает ресурсы из одного объекта в другой
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить