объяснить мне за ООП ;-)

121
22 апреля 2022, 16:20

Недавно начал учить ООП на с++ и сразу же появился вопрос. Почему когда в 38 строке я записываю в переменную b значения таким образом, то ни конструктор, ни перегруженный оператор "=" не вызываются. Объясните пошагово, пожалуйста, как работает код в строке 38. Буду благодарен :) Вот код:

#include <iostream>
using namespace std;
class Point{
private:
    int x;
    int y;
public:
    Point(){
        cout << "constructor1\t"<< this<<endl;
        x = NULL;
        y = NULL;
    };
    Point(int x, int y)
    {
        this->x = x;
        this->y = y;
        cout << "constructor2\t"<< this <<endl;
    };
    ~Point()
    {
        cout << "destructor\t" << this << endl;
    };
    void Print()
    {
        cout <<"x = " <<x <<"\ty = " << y<<";\t"<<this<< endl;
    }
    Point& operator =(const Point& other)
    {
        x = other.x;
        y = other.y;
        cout << "operator = "<< this << endl;
        return *this;
    }
};
int main()
{
    Point a(1, 2);
    Point b = a;
    a.Print();
    b.Print();
}
Answer 1

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

Point(const Point& p): x(p.x), y(p.y)
{
    cout << "copy constructor\t"<< this <<endl;
}

и попробуйте еще раз...

P.S. не для вас, а для тех, кто может начать уточнять :) - остальные огрехи типа присваивания NULL, присваивания, а не инициализации я трогать не стал - в данном случае они несущественны.

READ ALSO
Самое быстрое обращение матриц

Самое быстрое обращение матриц

Всем добрый вечер! Столкнулся с потребностью сверхскростного обращения матриц без использования nplinalg

138
Установка динамической библиотеки с помощью cmake

Установка динамической библиотеки с помощью cmake

У меня есть C++/Qt библиотека, которую я написал самЯ понимаю, что для ее распространения, cmake должен устанавливать

132
Программа выдаёт ошибку

Программа выдаёт ошибку

Написал простейший алгоритм на с++, который находит сумму элементов массива, которые не равны максимальному, повторяющие максимальные элементы...

222
Получение значения ячейки TableView в делегате Qml

Получение значения ячейки TableView в делегате Qml

Есть TableView заполняющаяся через QSqlQueryModelВ первой колонке boolean данные, ориентируясь на значение ячейки необходимо отрисовать в ней ту или иную...

162