Указатель this языка CPP

Любой метод класса самостоятельно определяет, для какого объекта он был вызван и "видит" другие члены класса без передачи их в качестве параметров. Зададимся вопросом: как это происходит?!

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

  1. Указатель this инициализируется значением адреса объекта, для которого вызван метод, перед началом выполнения кода этого метода.
  2. Имя this является служебным (ключевым) словом.
  3. Явно описать или определить указатель this нельзя.
  4. В соответствии с неявным определением this является константным указателем, т.е. изменять его нельзя, однако в каждой принадлежащей классу функции он указывает именно на тот объект, для которого функция вызывается.
  5. Объект, который адресуется указателем this, становится доступным внутри принадлежащей классу функции именно с помощью указателя this.
  6. Внутри функции - члена класса можно явно использовать этот указатель.

Указатель this является очень полезным, а иногда просто незаменимым. Например, в следующем коде указатель this позволяет компилятору разобраться в ситуации, когда имя компонента класса совпадает с именем формального параметра, принадлежащего методу:

# include <iostream>
using namespace std;

class Student	// Класс студент.
{    
	char name[50]; // имя
	char surname[50]; // фамилия
	int age; // возраст
public:
	//Конструктор: 
	Student(char name[],char surname[],int age)
	{ 
		// Компоненты и одноименные параметры: 
		strcpy(this->name,name);
		strcpy(this->surname,surname);
		this->age=age;
	}
	void Show()
	{ 
		// Здесь this является необязательным,
		// однако использовать его можно
		cout << "\nNAME - " << this->name; 
		cout << "\nSURNAME - " << this->surname; 
		cout << "\nAGE - " << this->age;
		cout << "\n\n";
	}
}; 

void main(void)
{ 
	Student A("Ivan","Sidoroff",25);	
	A.Show();
}
PQ VPS сервера в 38+ странах.

📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!