C 學習筆記 四 指標 4

2021-06-16 04:00:25 字數 2925 閱讀 9808

類成員指標

本文主要討論

c++中類成員的指標,這部分內容少有使用,也比較難於理解。

如果文中有錯誤或遺漏之處,敬請指出,謝謝!

需要使用類成員指標的情況是比較少見的,所以一般沒人使用這個語言特性。下面先介紹類成員指標的使用方法,再介紹它的可能應用場合。

有時,我們需要在類外的其它地方直接獲得類成員,這時我們就需要使用類成員指標。類成員指標與物件的指標不同,它不僅包括類的型別,還包括成員的型別。成員指標只應用於類的非

static

成員,因為

static

類成員不是任何物件的組成部分,只需使用普通指標即可。

宣告成員指標

借用書上的乙個例子,有這麼乙個類:

class screen ;

若要宣告

contents

成員的指標,應有如下形式:

string screen::*ps;

若要宣告

cursor

、height

或width

成員的指標,應有如下形式:

screen::index screen::*pi;

從上面的使用形式可以看出,使用類成員的指標與普通指標的區別在於,需要在類成員指標前面的加上類限定符,以指明是哪個類的成員指標。同樣,在初始化指標時,也只能用相應類的相應型別的成員對指標進行初始化,例如:

ps = &screen::contents;

pi = &screen::cursor;

上面介紹了對類資料成員的指標的使用方法,下面對函式成員的指標進行介紹。

函式成員的指標與普通函式指標相比,也多了類限定符。由於類成員函式還有可能是

const

,所以const

也成為成員函式指標宣告的一部分。也就是說,函式成員的指標必須在三個方面與它所指函式的型別相匹配:(1

)函式形參的型別和數目;(2

)返回型別及是否為

const

函式;(

3)所屬類的型別。

例如,要定義

screen

的get

成員的指標,可以如下定義:

char (screen::*pmf)() const = &screen::get; // not 'screen::get'!

char (screen::*pmf2)(screen::index, screen::index) const;

pmf2 = &screen::get;

這裡需要注意的是:(1)這裡不存在函式型別到函式指標型別的自動轉換(即類成員函式前面必須加上&,然後再給相應指標賦值);(2)運算子的優先順序關係(注意指標外層的括號所起的作用);(3)函式到指標的自動型別匹配(注意兩個過載版本的get對指標的賦值)。

使用類成員指標

要使用類成員指標所指物件,首先應當從類物件取得成員指標,再解引用指標,所以有如下兩種操作符供使用:.*和

->*

。這兩個操作符的左運算元必須是類型別的物件或類型別的指標,右運算元是該型別的成員指標。例如:

screen sc;

char c = (sc.*pmf)();  //

等價於呼叫

sc.get();

screen *ps = ≻

c = (ps->*pmf)();

下面給出成員指標使用的完整例子,以方便讀者更好的理解:

#include

<

string

>

class

screen

char

get(

index ht

,index wd

)const

private

:std

::string

contents

;index cursor

;index heigth

,width;};

void

func()

intmain()

成員指標的應用舉例

當乙個類有多個性質相同且型別相同的函式成員時,可以使用函式表來進行函式呼叫,產生用同一函式使用不同引數來達到不同操作的效果,而實際上是呼叫了不同的函式來實現的。下面給出這樣的乙個例子,方便讀者有乙個感性的認識:

#include

<

iostream

>

using

namespace

std;

class

screen

screen

&forward

()screen

&back

()screen&up

()screen

&down

()// function table

typedef

screen&(

screen::*

action

)();

static

action menu

;// specify which direction to move

enum

directions

;screen

&move

(directions

);};

screen

::action screen

::menu

=;screen

&screen

::move

(directions dirc)

intmain()

[1] c++ primer(edition 4)

[2] thinking in c++(edition 2)

[3] international standard:iso/iec 14882:1998

源文件 <

>

C 學習筆記4 指標

1.什麼是指標?指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。在使用指標儲存其他變數位址之前,對其進行宣告。指標變數宣告的一般形式為 type var name type 是指標的基型別,它必須是乙個有效的 c 資料型別,var name 是指標變數的名稱。星號是用來指定乙個變數...

C 學習筆記 四 指標 1

函式存放在記憶體的 區域內,它們同樣有位址,我們如何能獲得函式的位址呢?如果我們有乙個int test int a 的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。定義乙個指向函式的指標用如下的形式,以上面的test 為例 int fp int a 這裡就定義...

C語言學習筆記(四) 指標

c語言學習筆記 四 指標 include intmain p就是乙個指標,p就是取出p指向位址的值 陣列 相同型別的資料集合 include intmain 在這個程式中,p是乙個指標,a是乙個陣列,若p a 0 或者p a就是p指向陣列的第乙個元素,接下來就可以對p進行 1或 1進行偏移操作 in...