C++ указатель this

Классы & объекты C++

В C++,thisУказатель this — это специальный указатель, который указывает на экземпляр текущего объекта.

В C++, каждый объект может черезthisУказатель this используется для доступа к своему собственному адресу.

thisскрытый указатель, который может использоваться в функциях-членах класса и может использоваться для указания на вызывающий объект.

Когда вызывается функция-член объекта, компилятор неявно передаёт адрес этого объекта как указатель this.

Дружественные функции не имеютthisуказателя, потому что друг не является членом класса; только функции-члены имеют его.thisуказатель.

Следующий пример помогает лучше понять концепцию указателя this:

Пример

#include <iostream> class MyClass { private: int value; public: void setValue(int value) { this->value = value; } void printValue() { std::cout << "Value: " << this->value << std::endl; } }; int main() { MyClass obj; obj.setValue(42); obj.printValue(); return 0; }

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

Value: 42

Разбор примера:

  • В приведенном выше примере мы определили класс с именем MyClass, у которого есть приватная переменная-член value.

  • Функция setValue() в классе используется для установки значения value, а функция printValue() — для вывода значения value.

  • В функции setValue() мы используем указатель this, чтобы обратиться к переменной-члену value текущего объекта, и присваиваем ей переданное значение. Это явно сообщает компилятору, что мы хотим получить доступ к переменной-члену текущего объекта, а не к параметру функции или локальной переменной.

  • В функции printValue() мы аналогично используем указатель this, чтобы обратиться к переменной-члену value текущего объекта, и выводим её.

  • В функции main() мы создаем объект obj класса MyClass, затем используем функцию setValue(), чтобы установить value в 42, и выводим его с помощью функции printValue().

  • Используя указатель this, мы можем получать доступ к переменным-членам текущего объекта в функциях-членах, даже если они имеют те же имена, что и параметры функций или локальные переменные. Это позволяет избежать конфликтов имен и гарантирует, что мы обращаемся к правильной переменной.

Другие примеры

Следующий пример используется для сравнения объёмов параллелепипедов:

Пример

#include <iostream> using namespace std; class Box { public: // Определение конструктора Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Вызовите конструктор." << endl; length = l; breadth = b; height = h; } double Volume() { return length * breadth * height; } int compare(Box box) { return this->Volume() > box.Volume(); } private: double length; // Ширина double breadth; // Длина double height; // Высота }; int main(void) { Box Box1(3.3, 1.2, 1.5); // Объявить box1 Box Box2(8.5, 6.0, 2.0); // Объявить box2 if(Box1.compare(Box2)) { cout << "Объём Box2 меньше объёма Box1." <<endl; } else { cout << "Объём Box2 больше или равен объёму Box1." <<endl; } return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

调用构造函数。
调用构造函数。
Box2 的体积大于或等于 Box1

Классы & объекты C++

Другие расширения