In C++, the this
keyword is a crucial element of object-oriented programming. It is an implicit pointer passed to all non-static member functions of a class, which refers to the current instance of the class.
This article will provide a detailed explanation of the C++ this keyword, its uses, and how it functions in various contexts within the C++ language.
What is the C++ this
Keyword?

The C++ this keyword is a special pointer used to reference the current object in non-static member functions. It is an automatically passed parameter to every non-static member function and points to the object that invoked the member function.
Here’s a simple example of how the this
keyword works:
cppCopyEditclass Rectangle {
private:
int width;
int height;
public:
// Constructor to initialize width and height
Rectangle(int width, int height) {
this->width = width; // 'this' refers to the member variable
this->height = height;
}
int area() {
return this->width * this->height; // Access member variables using 'this'
}
};
In this example, C++ this helps resolve naming conflicts between the constructor parameters and the member variables. If we did not use C++ this, it would not be clear whether we are referring to the member variable or the constructor parameter.
How Does C++ this
Work?
The C++ this keyword is a pointer that points to the object that calls the member function. You don’t explicitly pass C++ this; it is automatically provided by the compiler to all non-static member functionson.
Consider the following example:
cppCopyEditclass Box {
private:
int length;
public:
Box(int length) {
this->length = length; // Use 'this' to refer to member variable
}
void display() {
std::cout << "Length: " << this->length << std::endl; // Access member variable
}
};
int main() {
Box box(10);
box.display(); // Output: Length: 10
return 0;
}
In the above example, C++ this refers to the object that called the display()
method, allowing you to access and display the length
of the box
object.
Uses of the C++ this
Keyword
The C++ keyword is used for several important tasks in C++ programming. Let’s explore its key uses:
Resolving Naming Conflicts
The most common use of the this
pointer is to resolve naming conflicts between member variables and function parameters. If a function parameter has the same name as a member variable, the this
pointer helps differentiate between them.
cppCopyEditclass Car {
private:
std::string model;
public:
Car(std::string model) {
this->model = model; // Resolving naming conflict using 'this'
}
void display() {
std::cout << "Car Model: " << this->model << std::endl; // Using 'this' to access member variable
}
};
In this case, the constructor parameter model
is used to initialize the object’s model
member variable, and this->model
helps avoid ambiguity.
Accessing Object Members

You can use the this
pointer to access the object’s members inside member functions, especially when there is ambiguity or when it is needed for clarity.
cppCopyEditclass Person {
private:
std::string name;
public:
Person(std::string name) {
this->name = name; // Use 'this' to refer to the member variable
}
void greet() {
std::cout << "Hello, my name is " << this->name << std::endl; // Access member variable using 'this'
}
};
Here, this->name
is used to access the member variable name
of the current object.
Returning the Object Itself
In method chaining or operator overloading, it may be necessary to return the object itself. You can achieve this by returning *this
, which dereferences the this
pointer to refer to the object itself.
cppCopyEditclass Calculator {
private:
int value;
public:
Calculator(int value) : value(value) {}
Calculator& add(int num) {
this->value += num;
return *this; // Returning the current object
}
Calculator& subtract(int num) {
this->value -= num;
return *this; // Returning the current object
}
int getValue() const {
return value;
}
};
int main() {
Calculator calc(10);
calc.add(5).subtract(2); // Method chaining
std::cout << "Result: " << calc.getValue() << std::endl; // Output: Result: 13
return 0;
}
In this example, method chaining is possible because the add
and subtract
methods return a reference to the current object (*this
), allowing you to chain multiple function calls on the same object.
this
vs *this

this
: A pointer to the current object.*this
: Dereferences thethis
pointer, which gives you the object itself.
You use this
when you want to refer to the pointer to the current object, while *this
is used when you want to refer to the actual object that the pointer points to.
Here’s an example of using *this
:
cppCopyEditclass Box {
private:
int length;
public:
Box(int length) : length(length) {}
Box& operator=(const Box& other) {
if (this != &other) { // Avoid self-assignment
this->length = other.length;
}
return *this; // Returning the object itself
}
void display() {
std::cout << "Length: " << this->length << std::endl;
}
};
In the operator=
, *this
is used to return the object itself, which is useful for operator overloading.
Conclusion
The this
keyword is a fundamental part of C++ that allows non-static member functions to refer to the current object. It provides a way to resolve naming conflicts, access object members, and even return the object itself for method chaining.
Understanding how the this
pointer works will help you write more efficient and clear C++ code.
By mastering the use of this
, you can improve your understanding of object-oriented programming in C++ and write more powerful, reusable code.
FAQs
What is the purpose of the this
pointer in C++?
The this
pointer refers to the current object inside non-static member functions, allowing access to its properties and methods.
Can I use this
in a static function?
No, static functions do not belong to any specific object, so they do not receive a this
pointer.
What happens if I try to modify the this
pointer?
The this
pointer is a constant pointer and cannot be reassigned. It always points to the current object.
Can I use this
in a constructor?
Yes, this
is commonly used in constructors to resolve naming conflicts between parameters and member variables.
How is this
used as a reference in C++?
By returning *this
in a member function, you can return a reference to the current object, enabling method chaining.
What is the difference between this
and *this
in C++?
this
is a pointer to the object, while *this
dereferences it to return the object itself.
Why is the this
pointer useful in operator overloading?
Returning *this
allows method chaining, enabling multiple operations on the same object in a single statement.
How does the this
pointer work in C++ classes?
It provides access to the current object’s members inside non-static methods, resolving ambiguities when parameter names match member names.
Where can I learn more about the this
pointer in C++?
You can explore resources like W3Schools, C++ reference guides, and detailed PDFs explaining this
with examples.