類成員指標
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 申明類成...