ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel
  • »
  • Technology»
  • Computers & Software»
  • Computer Science & Programming»
  • Programming Languages

What is the use of "this pointer" in C++?

Updated on January 8, 2017

1. Introduction

We know that a class can have member functions and member variables. How to we extract the object that called the member function, inside the member function itself? The answer is the pointer “this”. The “this” pointer actually refers the object that called the member function.


In many circumstances, it may be required to return the current object to the caller of the member function. Let us explore this with a suitable example.

2. The code

The complete code that uses the "this" pointer shown below:

// TestIt.cpp : Defines the entry point for the 
//              application.
//
#include "stdafx.h"
#include "conio.h"

class Point2d
{
public:

    //Sample 01: Default Ctor
    Point2d(int a, int b)
    {
        x = a;
        y = b;
    }

    //Sample 02: Function that demonstrates the usage of this
    Point2d* Increment()
    {
        x++;
        y++;
        return this;
    }

    //Sample 03: Function that demonstrates the usage of this
    Point2d Decrement()
    {
        x--;
        y--;
        return (*this);
    }

    //Sample 04: Print Co-ordinates
    void Print()
    {
        printf("X Co-Ordinate :%d\n", x);
        printf("y Co-Ordinate :%d\n", y);
    }

private:
    int x;
    int y;
};

int _tmain(int argc, _TCHAR* argv[])
{
    //Sample 05: Test this pointer
    Point2d pt1(4,4);
    Point2d * inc_point = pt1.Increment();
    inc_point->Print();

    //Sample 06: Test this pointer
    Point2d pt2(2,2);
    Point2d dec_point = pt2.Decrement();
    dec_point.Print();

    getch();
}

3. Code Explanation

The constructor initialises the data members x, y from the parameters passed to the constructor.

    //Sample 01: Default Ctor
    Point2d(int a, int b)
    {
        x = a;
        y = b;
    }

Next, a function called increment is written and the intent of the function is to increment the data member by 1 and return the current object. How Do I return the current object? This is where the usage of the keyword “this” comes into the picture. In the below code you can see the usage of the “this pointer” with the return statement.


    //Sample 02: Function that demonstrates the usage of this
    Point2d* Increment()
    {
        x++;
        y++;
        return this;
    }

The "decrement" function implementation is similar to the previous function implementation. But this time, we return the object itself instead of returning a pointer to the current object. Below is "decrement" function that decreases the point value by one.

    Point2d Decrement()
    {
        x--;
        y--;
        return (*this);
    }

The print function just prints the values in the coordinate x, y. This function is straightforward and it is listed below:

   //Sample 04: Print Co-ordinates
    void Print()
    {
        printf("X Co-Ordinate :%d\n", x);
        printf("y Co-Ordinate :%d\n", y);
    }

In the main we created two points pt1, pt2. We increment pt1 and store the return address in a pointer called inc_point. The pt2 is decremented and the return value is copied to the variable dec_point. The code is shown below:

    //Sample 05: Test this pointer
    Point2d pt1(4,4);
    Point2d * inc_point = pt1.Increment();
    inc_point->Print();

    //Sample 06: Test this pointer
    Point2d pt2(2,2);
    Point2d dec_point = pt2.Decrement();
    dec_point.Print();

The below picture illustrates how the objects are pointed inside the member functions (For out Example):

Source

The output of executing the example is shown in the below screenshot:

Source

Comments

    0 of 8192 characters used
    Post Comment

    No comments yet.