Pointers to Class Members in C++
Just like pointers to normal variables and functions, we can have pointers to class member functions and member variables.
Let's see how this works.
Defining a Pointer of Class type
We can define pointer of class type, which can be used to point to class objects.
Simple* ptr; // Pointer of class type
ptr = &obj;
cout << obj.a;
cout << ptr->a; // Accessing member with pointer
Here you can see that we have declared a pointer of class type which points to class's object. We can access data members and member functions using pointer name with arrow
Pointer to Data Members of Class
We can use pointer to point to class's data members (Member variables).
Syntax for Declaration :
datatype class_name :: *pointer_name;
Syntax for Assignment:
pointer_name = &class_name :: datamember_name;
Both declaration and assignment can be done in a single statement too.
datatype class_name::*pointer_name = &class_name::datamember_name ;
Using Pointers with Objects
For accessing normal data members we use the dot
. operator with object and
-> qith pointer to object. But when we have a pointer to data member, we have to dereference that pointer to get what its pointing to, hence it becomes,
and with pointer to object, it can be accessed by writing,
Lets take an example, to understand the complete concept.
cout << "a is "<< a;
Data d, *dp;
dp = &d; // pointer to object
int Data::*ptr=&Data::a; // pointer to data member 'a'
a is 10
a is 20
The syntax is very tough, hence they are only used under special circumstances.
Pointer to Member Functions of Class
Pointers can be used to point to class's Member functions.
return_type (class_name::*ptr_name) (argument_type) = &class_name::function_name;
Below is an example to show how we use ppointer to member functions.
int (Data::*fp1) (float) = &Data::f; // Declaration and assignment
int (Data::*fp2) (float); // Only Declaration
fp2 = &Data::f; // Assignment inside main()
Some Points to remember
- You can change the value and behaviour of these pointers on runtime. That means, you can point it to other member function or member variable.
- To have pointer to data member and member functions you need to make them public.