指向类的成员的指针。在C++中,可以说明指向类的
数据成员和成员函数的指针。
定义
对象指针:指向类的成员的指针。在C++中,可以说明指向类的
数据成员和成员函数的指针。
格式
<类型说明符><类名>::*<指针名>
指向成员函数的指针格式如下:
<类型说明符>(<类名>::*<指针名>)(<参数表>)
例如,设有如下一个类A:
class A
{
public:
int fun (int b) { return a*c+b; }
A(int i) { a=i; }
int c;
private:
int a;
};
定义一个指向类A的
数据成员c的指针pc,其格式如下:
int A:: *pc = &A::c;
再定义一个指向类A的成员函数fun的指针pfun,其格式如下:
int (A:: *pfun)(int) = &A::fun;
由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定A类的一个对象,然后,通过对象来引用指针所指向的成员。例如,给pc指针所指向的
数据成员c赋值8,可以表示如下:
A a;
a.*pc = 8;
其中,
运算符.*是用来对指向类成员的指针来操作该类的对象的。
如果使用指向对象的指针来对指向类成员的指针进行操作时,使用运算符->*。例如:
A *p = &a; //a是类A的一个对象,p是指向对象a的指针。
p ->* pc = 8;
<类型说明符>*<指向函数指针名>(<参数表>)
关于给指向函数的指针赋值的格式如下:
<指向函数的指针名>=<函数名>
关于在程序中,使用指向函数的指针调用函数的格式如下:
(*<指向函数的指针名>)(<实参表>)
相关应用
如果是指向
类的成员函数的指针还应加上相应的对象名和对象成员
运算符。
#include
class A
{
public:
A(int i) { a=i; }
int fun(int b) { return a*c+b; }
int c;
private:
int a;
};
void main()
{
A x(8); //定义类A的一个对象x
int A::*pc; //定义一个指向类
数据成员的指针pc
pc=&A::c; //给指针pc赋值
x.*pc=3; //用指针方式给类成员c赋值为3
int (A::*pfun)(int); //定义一个指向类成员函数的指针pfun
pfun=&A::fun; //给指针pfun赋值
A *p=&x; //定义一个对象指针p,并赋初值为x
cout<<(p->*pfun)(5)<<endl; //用对象指针调用指向类
成员函数指针pfun指向的函数
}
以上程序定义了好几个指针,虽然它们都是指针,但是所指向的对象是不同的。p是指向类的对象;pc是指向类的
数据成员;pfun是指向
类的成员函数。因此它们的值也是不相同的。