Можно определить указатель на компоненты-данные.
тип_данных(имя_класса : :*имя_указателя)
В определении указателя можно включить его инициализатор
&имя_класса : : имя_компонента
Пример.
double(complex ::*pdat) = &complex :: re;
Естественно, что в этом случае данные-члены должны иметь статус открытых(pubic).
После инициализации указателя его можно использовать для доступа к данным объекта.
complex c(10.2,3.6);
c.*pdat=22.2; //изменилось значение поля re объекта c.
Указатель на компонент класса можно использовать в качестве фактического параметра при вызове функции.
Если определены указатели на объект и на компонент, то доступ к компоненту с помощью операции ‘ –>* ’.
указатель_на_объект –>* указатель_на_компонент
Пример
double(complex ::*pdat) = &complex :: re;
complex C(10.2,3.6);
complex *pcom = &C;
pcom –>*pdat = 22.2;
Можно определить тип указателя на компоненты-данные класса:
typedef double(complex::*PDAT);
void f(complex c, PDAT pdat) {c.*pdat=0;}
complex c;
PDAT pdat=&complex::re;
f(c,pdat);
pdat=&complex::im;
f(c,pdat);