Любой метод класса самостоятельно определяет, для какого объекта он был вызван и "видит" другие члены класса без передачи их в качестве параметров. Зададимся вопросом: как это происходит?!
Ответ на этот вопрос не является секретом. Дело в том, что когда функция, принадлежащая классу, вызывается для обработки данных конкретного объекта, этой функции автоматически и неявно передается указатель на тот объект, для которого функция вызвана. Этот указатель имеет фиксированное имя this и незаметно для программиста определен в каждой функции класса.
Указатель 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();
}