C 類成員指標

2021-06-27 00:36:42 字數 2506 閱讀 4607

類成員指標

1.成員指標式可以指向類的非靜態成員的指標。類的靜態成員不屬於任何物件,因此無需特殊的指向靜態成員的指標。指向靜態成員的指標的普通指標沒有任何區別。

2.當初始化乙個類成員指標時,我們令其指向類的成員,但不指定代成員所屬的物件,直到使用到成員指標時,才提供所屬的物件。

3.資料成員指標

例:class screen;

char get() const;

char get(pos ht, pos wd) const;

private:

std::string contents;

pos cursor;

pos height , wight;

(1)const string screen::*pdata;//宣告,乙個指向

screen

類的const string 

成員的指標;

(2)pdata=&screen::contents;//初始換

(3)使用資料成員指標

當我們初始化乙個成員指標或為成員指標賦值時,該指標別並沒有指向任何資料。成員指標指定了成員而非所屬的物件,只有當解引用成員指標時我們才能提供物件的資訊。

screen myscreen;

*pscreen=&myscreen;

auto s=myscreen.(*pdata);或s=pacreen->(*pdata);

(4).返回成員指標函式

常規的訪問控制規則對成員指標同樣有效,public

,private

,protected

。如果對於某個類,我們希望訪問他的私有成員,最好定義乙個函式令其返回值是指向成員的指標。

4.成員函式指標

auto pmf=&screen::get_cursor;

(1)過載問題:

char (

screen

::*pmf

)(screen

::pos

,screen

::pos

)const;//

函式指標宣告

pmf=&screen::

get;

(2)和普通函式不同,在成員函式和指向成員函式的指標之間不存在自動轉換規則:

pmf=&screen::

get;

//正確

pmf=screen::get;//錯誤

(3)使用成員函式指標

screen myscreen;

*pscreen=&myscre;

char c1=(

pscreen->*pmf

)(0,0 );

char c2=(myscreen.(*pmf)) (0,0);

5.將成員函式用作可呼叫物件 (1

)與普通的函式指標不同,成員指標不是乙個可呼叫物件。 例:

auto fp=&string::

empty;

find_if(svec.begin(), svec.end(), fp);//錯誤:要想通過成員指標呼叫函式必須使用

->*y

運算子。 (2

)使用function

生成乙個可呼叫物件

functionfcn=&string::empty;

find_if(svev.begin(),svec.end(),fcn);

(3)使用

mem_fn

生成乙個可呼叫物件

和function

一樣,mem_fn

也定義在

functional

標頭檔案中,並且可以從成員指標生成乙個可呼叫物件;和

function

不同,mem_fn

可以根據成員指標的型別推斷可呼叫物件的型別,而無需使用者顯示的指定。

find_if(svec.begin(),svec.end(),mem_fn(&string::empty));

mem_fn生成的可呼叫物件可以通過物件呼叫,也可以通過指標呼叫:

auto f=mem_fn(

&string

::empty);

f(*svec.begin()

);//

物件呼叫

f(&svec[0]);//指標呼叫 (4

)使用bind

生成乙個可呼叫物件

auto it=find_if(

svec.begin(),svec.end(),bind(&string::empty,_1));

和function

類似的地方是,當我們使用

bind

時,必須將函式中用於表示物件的隱式形參轉換成顯示的。和

mem_fn

類似生成的可呼叫物件可以通過物件呼叫,也可以通過指標呼叫:

auto f=bind(

&string

::empty,_1

); f(

*svec.begin()

);//

物件呼叫

f(&svec[0]);//指標呼叫

C 類成員指標

首先讓我們看一下,乙個簡單的成員變數指標 和 成員函式指標的使用例子。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 在...

C 類成員指標

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

C 類成員函式指標

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