成员指针

更新时间:2024-05-21 11:44

成员指针是C++中用于对类中成员进行操作。

定义

成员指针的定义格式:成员类型 类名::*指针名=&类名::成员名;

成员函数指针的定义格式: 成员函数返回类型 类名::*指针名 = &类名::成员函数名(参数表);

例:class A

{

public:

int m;

void func(){};

...

};

定义成员指针: int A::*p = &A::m;

定义成员函数指针: void (A::*f)() = &A::func;

主要区别

普通指针用确定对象的地址进行初始化,指向一个确定的对象;成员指针用类的成员(注意不是对象的成员,而是类的成员)初始化(也就是只有偏移量的信息,而没有初始地址的信息)。

1)在处理一般指针时,可以隐式的将一个指向子类类型的指针转换成一个基类类型的指针,相反则不行。如:

class BASE{

virtual void func();

};

class DERVIED : public BASE{

void func();

};

BASE *bp = new DERVIED; //OK, convert 'DERVIED*' to 'BASE*'

DERVIED *bp = new BASE; //error, can not convert 'BASE*' to 'DERVIED*'

2)对于成员指针,与一般指针刚好相反,一个指向基类的成员指针可以隐式转换成指向子类相应成员指针,相反则不行。如(同样采用上面的两个类):

typedef void (BASE::*BMF)();

typedef void (DERVIED::*DMF)();

BMF bmf1 = &BASE::func; //OK

BMF bmf2 = &DERVIED::func; //error, can not convert 'DERVIED::*' to BMF

DMF dmf1 = &BASE::func; //but this is OK

DMF dmf2 = &DERVIED::func; //OK

由于子类具有基类的所有成员,所以一个子类的成员指针可以指向基类的相应成员,相反,子类可能包含了基类中不存在的成员,所以基类的成员指针不能指向子类成员。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}