成員指針

成員指針是C++中用於對類中成員進行操作。

基本介紹

  • 中文名:成員指針
  • 外文名:無
  • 課程: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
由於子類具有基類的所有成員,所以一個子類的成員指針可以指向基類的相應成員,相反,子類可能包含了基類中不存在的成員,所以基類的成員指針不能指向子類成員。

相關詞條

熱門詞條

聯絡我們