Почему переменная становится равна 1, если после инициализации класса она была равна 3?

Предположим, у нас есть класс с полем x, которое инициализируется значением 3 в конструкторе класса. Далее, мы создаем объект этого класса и присваиваем значение 1 переменной x.

Пример кода может выглядеть следующим образом:

#include <iostream>

class MyClass {
public:
    int x;

    MyClass() {
        x = 3;
    }
};

int main() {
    MyClass obj;
    obj.x = 1;

    std::cout << obj.x << std::endl;

    return 0;
}

При выполнении этого кода значение переменной x будет равно 1, а не 3. Это происходит потому, что после создания объекта obj и вызова конструктора, поле x устанавливается в 3. Затем, когда мы присваиваем значение 1 переменной x, мы меняем текущее значение этой переменной на 1.

Если вам нужно сохранить исходное значение переменной x, можно использовать дополнительную переменную или метод для хранения или возврата значения 3. Например:

#include <iostream>

class MyClass {
public:
    int initialX;
    int x;

    MyClass() {
        initialX = 3;
        x = initialX;
    }

    void resetX() {
        x = initialX;
    }
};

int main() {
    MyClass obj;
    obj.x = 1;

    std::cout << obj.x << std::endl; // Выводит 1

    obj.resetX();

    std::cout << obj.x << std::endl; // Выводит 3

    return 0;
}

Таким образом, чтобы предотвратить потерю значения переменной x, вам следует сохранить исходное значение в дополнительной переменной или использовать метод для сброса переменной x обратно на исходное значение.