Let us understand with an example how and where this pointer is used.
class employee {
unsigned int m_age;
unsigned int m_salary;
employee(unsigned int age, unsigned int salary) {
m_age = age; // same as this->m_age = age;
m_salary = salary; //same as this->m_salary = salary
}
void update(unsigned int age, unsigned int salary) {
m_age = age; // same as this->m_age = age;
m_salary = salary; //same as this->m_salary = salary
}
};
int main() {
employee emp(40, 45000);
emp.update(40, 50000);
return 0;
}
In the above example, employee object viz. emp is created.
When function viz. update is called using emp object, emp object is implicitly passed in the update function.emp.update (40, 50000);
converted internally to:emp.update(&emp, 40, 50000);
Similarly, void update(unsigned int age, unsigned int salary);
converted internally to:void update(employee* const this, unsigned int age, unsigned int salary);
- this pointer is passed as an hidden argument to all the nonstatic member function. This functionality helps in accessing the data member of an object in nonstatic member functions.
- Friend functions do not have this pointer since they are not members of a class.
- Static functions do not have this pointer.
- this pointer is not a member of a class nor it is stored anywhere.
- this pointer can be used in the constructor as well because when we create an object, memory is allocated by compiler and address of that memory location is passed as a hidden parameter to the constructor which is nothing but a this pointer as shown in the above example