C++ this Pointer: In the C++ language, this is a keyword that refers to the current instance of the class. There are three main uses for using this keyword. They are as follows:
- It can be used to pass the current object as a parameter to another method.
- used to refer the current class instance variable.
- It can be used to declare indexers.
The compiler supplies an implicit pointer along with the names of the functions as ‘this’. While ‘this’ pointer is passed as a hidden argument to all nonstatic member function calls and is available as a local variable within the body of all nonstatic functions.
C++ this Pointer
Applications of this pointer
There are three main applications used in this pointer. They are as follows:
- Return Object
- Method Chaining
- Distinguish data members
Syntax:
private:
public:
method(int a) {
//this pointer stores the address of object obj and access data member
this->dataMember = a;
… .. …
}
}
Example:
#include<iostream> #include<conio.h> using namespace std; class student { char name[100]; int age,roll; float percent; public: void getdata() { cout<<"Enter data"<<endl; cout<<"Name:"; cin>>name; cout<<"Age:"; cin>>age; cout<<"Roll:"; cin>>roll; cout<<"Percent:"; cin>>percent; cout<<endl; } student & max(student &s1,student &s2) { if(percent>s1.percent && percent>s2.percent) return *this; else if(s1.percent>percent && s1.percent>s2.percent) return s1; else if(s2.percent>percent && s2.percent>s1.percent) return s2; } void display() { cout<<"Name:"<<name<<endl; cout<<"Age:"<<age<<endl; cout<<"Roll:"<<roll<<endl; cout<<"Percent:"<<percent; } }; int main() { student s,s1,s2,s3; s1.getdata(); s2.getdata(); s3.getdata(); s=s3.max(s1,s2); cout<<"Student with highest percentage"<<endl; s.display(); getch(); return 0; }
Output:
Enter data
Name: Paul
Age:24
Roll:11
Percent:79
Enter data
Name: Reem
Age:21
Roll:9
Percent:87
Enter data
Name: Philip
Age:23
Roll:5
Percent:81
Student with highest percentage
Name: Reem
Age:21
Roll:9
Percent:87
Return Object
One of the important applications of using this pointer is to return the object it points.
Example: return *this;
Method Chaining
Once after returning the object from a function, a very useful application would be to chain the methods for ease and cleaner code.
Example: positionObj->setX(15)->setY(15)->setZ(15);
Distinguish Data Members
They distinguishing data members from local variables of member functions if they have same name.
Example:
#include <iostream> #include <conio.h> using namespace std; class sample { int a,b; public: void input(int a,int b) { this->a=a+b; this->b=a-b; } void output() { cout<<"a = "<<a<<endl<<"b = "<<b; } }; int main() { sample x; x.input(5,8); x.output(); getch(); return 0; }
Output:
a = 13
b = -3
Note: It should be noted that friend function and static function cannot have this pointer. It’s because friend function is not a member function of the class. And static function can be invoked without initialization of an object, i.e, static functions are not associated with any object.