C++類成員指針

和普通指針同樣,在申明成員指針時咱們也使用*來表示當前申明的名字是一個指針。函數

不一樣之處是成員指針還必須包含成員所屬的類。(classname::來表示當前定義的指針能夠指向classname的成員)this

eg:const string Test::*pTest;指針

特色:成員指針只針對類的非static成員。static成員指針是普通指針。get

1.定義數據成員的指針:string

string Screen::* //表示指向std::string類型的Screen類成員的指針io

string Screen::*ps_Streen = &Screen::contents;class

2.定義成員函數的指針:擴展

char (Screen::*)() const數據

char (Screen::*pmf)() const = &Screen::get:index爲在類Screen中定義的類型(下同)static

typedef std::string::size_type index;

char (Screen::*pmf)(Screen::index, Screen::index) const

3.類型別名(typedef)可使成員指針更容易擴展閱讀

//Screen類的接受兩個index類型形參並返回char的成員函數的指針

typedef char (Screen::* Action)(Screen::index, Screen::index) const

//可使用成員指針函數類型來聲明函數形參和函數返回類型

Screen& action(Screen&, Action = &Screen::get)

4.成員函數指針的使用

char c = (pScreen->*pmf)();

5.數據成員指針的使用

Screen::index Screen::*pindex = &Screen::width;:Screen::index ind2 = pScreen->*pindex;

6.定義成員函數指針表

typedef Screen& (Screen::*Action)();

Screen::Action Screen::Menu[] = {&Screen::home, &Screen::forward, &Screen::back, &Screen::up, &Screen::down}

7.成員函數指針表的使用

(this->*Menu[cm])();

相關文章
相關標籤/搜索