this C++ указатель на текущий объект класса

1) Ключевое слово this позволяет ссылаться внутри определения класса к текущему экземпляру объекта и любым его членам.

2) this возвращает указатель на объект и для ссылки на его члены необходимо использовать оператор -> (минус со стрелкой) а не оператор . (точка).

3) Ключевое слово thisнедоступно в статических методах класса, но это и логично, статические методы относятся ко всему классу а не к конкретному объекту (экземпляру)

4) Также может возникнуть необходимость вернуть объект из функции класса, тогда это можно сделать используя указатель на текущий объект класса this. Это позволяет каскадировать функции применимые к объекту (в приведенном ниже примере это up_left.move(5).mul(-1);)


#include <iostream> // cout
using namespace std;

class Point{    // Класс точка
private:        // Закрытые члены класса
    int x;      // Координата точки х
    int y;      // Координата точки y
public:         // Открытые члены класса
    Point(int x, int y){    // Конструктор объекта
        this->x = x;        // this->x относится к закрытой переменной х, а х - к параметру функции
        this->y = y;        // this->y относится к закрытой переменной y, а y - к параметру функции
    }
    void print(){           // Функция для вывода координат точки
        cout << "x = " << x << ", y = " << y << endl; // Вывод координат точки
    }
    Point& move(int offset){    // Функция смещает координаты х и у точки на offset (амперсанд нужен для передачи по ссылке)
        x += offset;            // Смещаем координаты точки x
        y += offset;            // Смещаем координаты точки y
        return *this;           // Смещаем возвращаем объект (разыменованный указатель)
    }
    Point& mul(int offset){     // Функция умножает координаты х и у точки на offset (амперсанд нужен для передачи по ссылке)
        x *= offset;            // Смещаем координаты точки x
        y *= offset;            // Смещаем координаты точки y
        return *this;           // Смещаем возвращаем объект (разыменованный указатель)
    }
};

int main(){
    Point center(100, 100);     // Создали объект center с координатами 100, 100
    Point up_left(30, 20);      // Создали объект up_left с координатами 30, 20
    center.print();             //x = 100, y = 100
    up_left.print();            //x = 30, y = 20
    up_left.move(5).mul(-1);    // Операторы возвращающие объект можно каскадировать неограниченное количество раз
    up_left.print();            //x = -35, y = -25
}
2023-10-23



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Конструктор в C++. Конструктор копирования и оператор присваивания.
delete C++ оператор освобождения памяти и спецификатор ограничения доступа
explicit С++ запрет неявных преобразования при вызове конструктора
friend C++ дружественная функция имеющая доступ к закрытым членам класса
mutable C++ изменение членов константного объекта
new C++ динамическое выделение памяти
private С++, С++ приватные члены класса, С++ закрыты члены класса
protected C++ указание защищенных членов класса
public С++, С++ открытые члены класса
struct С++ структура
this C++ указатель на текущий объект класса
virtual C++ виртуальные функции