4.8 指向类成员的指针
C++提供一种特殊的指针类型,它指向类的成员,而不是指向该类的一个对象中该成员的一个实例,这种指针称为指向类成员的指针。
指向类X中类型为 type 数据成员的指针的说明形式为:
type X::*pointer;
若类X为数据成员member的类型为type,则语句:
pointer=&X::member;
将该成员的地址存入pointer中。
注意:1、取一个类成员的地址使用表达式&X::member得到的地址不是真实地址,而是成员member在类X中的所有成员中的偏移。因此,若要访问某个对象中pointer 所指向的成员,使用特殊的运算符“.*”和“->*”。
2、在使用指向类成员的指针访问对象的某个成员时,必须指定一个对象。如果该对象由对象名或引用标识,则使用运算符“.*”;如果是使用指向对象的指针来标识,则使用运算符“->*”。
例如:EX4_5a.CPP。
下面的程序比较指向类成员的指针与一般的指针的区别:
cl obj(10);
int *p=&obj.val;
cout<<*p;
指向X类中参数类型列表为list,返回类型为type的成员函数的指针说明形式为:
type(X::*pointer)(list);
如果类X的成员函数function的原型与pointer所指向的函数的原型一样,则语句
pointer=X::function;
将该函数的地址(即它在该类的所有成员中的偏移)置给了指针pointer。与指向数据成员的指针类似,使用对象名或引用调用pointer所指向的函数时使用运算符“.*”;如果是使用指向对象的指针调用pointer所指向的成员函数时使用运算符“->*”。
例如:EX4_5b.CPP
当一个指向类成员的指针指向一个虚函数时,并且通过指向对象的指针(或引用)访问这个虚函数时,仍发生多态性。
例如:EX4_5c.CPP
指向类的静态成员的指针的定义和使用与一般指针的定义和使用方法一样。、
例如:EX4_5.CPP