this pointer is pointer that is accessible only inside the member functions of a class and points to the object who has called this member function.
After returning the object from a function, a very useful application would be to chain the methods for ease and a cleaner code.
Example :
obj->setX(15)->setY(15)->setZ(15);
Here, the methods setX, setY, setZ are chained to the object, obj. This is possible because each method return *this pointer. This is equivalent to :
obj->setX(15);
obj->setY(15);
obj->setZ(15);
Another application of this pointer is distinguishing data members from local variables of member functions if they have same name. For example,
Lets take an 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;
}
Now see above code here we have declared a,b as member of class And at the same time in same class we declare function input which takes same a,b args . now how my code ,compiler will know which a,b i want to use
So thats why we use this pointer to distinguish the local variable of input() data member of class, this pointer is used. When input() is called, the data of object inside it is represented as this->a and this->b while the local variable of function is represented simply as a and b.
a = 13
b = -3
One of the important applications of using this pointer is to return the object it points. For example, the statement
return *this;
inside a member function will return the object that calls the function. we will this in examples
#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;
}
A class student is created with data members name, roll, age and percent and member functons getdata(), max() and display(). Data for each student is entered by calling getdata() function. Then, max() function is called by object s3 and s2 and s1 are passed as parameter in the function. The value of percent is compared and the object with highest percent is returned. If the object calling the method has the highest percentage then, it is returned by using this pointer as,
return *this; // see above prohram carefully
Enter data
Name:aaa
Age:22
Roll:11
Percent:89
Enter data
Name:bbb
Age:22
Roll:9
Percent:87
Student with highest percentage
Name:aaa
Age:22
Roll:11
Percent:89
Input 1st number : 25
Input 2nd number : 39
After swapping the 1st number is : 39
After swapping the 2nd number is : 25
In programming, one of the frequently arising problem is to handle numerous data of same type.
Consider this situation, you are taking a survey of 100 people and you have to store their age. To solve this problem in C++, you can create an integer array having 100 elements.
An array is a collection of data that holds fixed number of values of same type. For example:
int a[100];
Simple lets check Syntax :
dataType arrayName[arraySize];
int a[20]
here int is data type
a is array name
20 size array size
You can access elements of an array by using indices.
Suppose you declared an array mark as above. The first element is mark[0], second element is mark[1] and so on.
Arrays have 0 as the first index not 1. In this example, mark[0] is the first element.
If the size of an array is n, to access the last element, (n-1) index is used. In this example, mark[4] is the last element.
Suppose the starting address of mark[0] is 2120d. Then, the next address, a[1], will be 2124d, address of a[2] will be 2128d and so on. It’s because the size of float is 4 bytes.
Lets take an example :
int mark[5] = {19, 10, 8, 17, 9};
// This is called array initialize at the time declaration
Also there is another menthos :
int mark[] = {19, 10, 8, 17, 9};
// Means if we are initializing array at the time declaration
no need to write size of array .
Lets take an simple Programming example :
int mark[5] = {19, 10, 8, 17, 9}
// change 4th element to 9
mark[3] = 9;
// take input from the user and insert in third element
cin >> mark[2];
// take input from the user and insert in (i+1)th element
cin >> mark[i];
// print first element of the array
cout << mark[0];
// print ith element of the array
cout >> mark[i-1];
#include <iostream>
using namespace std;
int main()
{
int numbers[5], sum = 0;
cout << "Enter 5 numbers: ";
// Storing 5 number entered by user in an array
// Finding the sum of numbers entered
for (int i = 0; i < 5; ++i)
{
cin >> numbers[i];
sum += numbers[i];
}
cout << "Sum = " << sum << endl;
return 0;
}
Arrays can be passed to a function as an argument.
We will explore this by taking an example :
#include < iostream >
using namespace std;
void display(int marks[5]);
int main()
{
int marks[5] = {88, 76, 90, 61, 69};
display(marks);
return 0;
}
void display(int m[5])
{
cout << "Displaying marks: "<< endl;
for (int i = 0; i < 5; ++i)
{
cout << "Student "<< i + 1 <<": "<< m[i] << endl;
}
}
The argument marks in the above code represents the memory address of first element of array marks[5].
And the formal argument int m[5] in function declaration converts to int* m;. This pointer points to the same address pointed by the array marks.
That’s the reason, although the function is manipulated in the user-defined function with different array name m[5], the original array marks is manipulated.
C++ handles passing an array to a function in this way to save memory and time.
1. Write a C++ program to find second largest element in an given array of integers :
2. Write C++ program to sort array in ascending and descending order
3. Write a C++ program to find the two repeating elements in a given array of integers.