C 類成員指標

2021-07-29 14:45:09 字數 1139 閱讀 4187

首先讓我們看一下,乙個簡單的成員變數指標 和 成員函式指標的使用例子。

struct a 

};int a:: * pi = &a::i;

void (a::* pfoo)() = &a::foo;

a a;

a.*pi = 1; //等同於 a.i = 1

(a.*pfoo)(); //等價於 a.foo();

在vc++ 下,輸出 &a::i 和 &a::foo 的值,你會發現他們的值都為1

在上面的例子中, pi 型別是 int a::*, pfoo 的型別是 void

我們可以 把成員指標的型別 抽象成如下表示式:

template

using memberpointer = type class::*;

// 1. 類中資料成員的指標, 那麼 type 就是 變數的型別

// 2. 類中函式成員的指標, 那麼 type 就是 函式的型別

// 例如 void func(int) 的函式型別 type 等同於 typedef void(type)(int)

成員指標的賦值可以抽象為如下**

type c::* p = c::member;

// member 是c 類中的成員資料或成員函式,其型別為 type;

需要注意的是,成員指標只能運用於 非靜態函式, 如果是靜態成員。如果是靜態成員,&t::member 返回的就是實際的記憶體位址。

成員函式指標的呼叫必須通過類物件,和操作符 .* 或 ->*

int a:: * pi = &a::i;aa

;a.*pi; // 等同於 a.i

a* a_ptr

;a_ptr->*pi; // 等同於 a_ptr->i;

通過上面使用的說明,其實可以發現, 成員指標指向的並不乙個特定物件的特定成員,而是乙個類的特定成員。那麼它必然不可能是乙個具體的記憶體上的位址。 通常情況下,我們可以將其理解為 成員 在類中的偏移量(相對於 類的起始位址而言)。

同乙個成員在在所有物件的偏移量是一致的,那麼當我們 有乙個物件時,通過偏移量 就能呼叫到 這個物件 特定的成員。

C 類成員指標

類成員指標 1.成員指標式可以指向類的非靜態成員的指標。類的靜態成員不屬於任何物件,因此無需特殊的指向靜態成員的指標。指向靜態成員的指標的普通指標沒有任何區別。2.當初始化乙個類成員指標時,我們令其指向類的成員,但不指定代成員所屬的物件,直到使用到成員指標時,才提供所屬的物件。3.資料成員指標 例 ...

C 類成員指標

類成員指標時指可以指向類的非靜態成員的指標,一般情況下,乙個指標指向乙個物件,但是成員指標指示的是類的成員,而非類的物件。指向類的靜態成員的指標和普通指標沒有什麼區別。與普通指標不同的是,類資料成員指標必須在 前新增classname 以表示當前定義的指標可以指向classname的成員。class...

C 類成員函式指標

使用類成員函式指標需要掌握的三點。1 申明類成員函式指標 2 通過物件指標呼叫類函式指標 3 通過物件呼叫類函式指標 例 定義基類和子類 class base virtual void print2 class derived public base virtual void print2 申明類成...