在具體介紹指向成員函式的指標之前先簡單介紹一下指向成員函式的指標與指向普通函式的指標的區別
指向成員函式的指標不僅要匹配將要指向的函式的引數型別,個數和返回值型別,還要匹配指向的成員函式所屬的類
指向普通函式的指標變數定義如下:
返回值型別 (* 指標名)();
而指向成員函式的指標的定義如下:
返回值型別 (類名::*指標名)();
指向成員函式的指標的初始化:
指標名=&類名::函式名;
指向成員函式的指標的呼叫:
(物件名.*指標名)();
看乙個具體的程式來開始理解:
#include
using namespace std;
class box
float volume()
float area()
private:
float length,width,height;
};int main()
{box box(1,2,3);
float (box::*p)(); //宣告指向成員函式的指標:可以把(box::*p)看做只是用來存放函式名稱的指標,後面的()正好與函式名後面的括號相對應
p=&box::volume; //初始化指向成員函式的指標:看到了吧,哲理只是把函式名的位址賦值給指標
cout<<"the volume of box is:"<<(box.*p)()《注意:
1.在對指向成員函式的指標初始化時要把類的函式賦值給指標,而不是把物件的函式賦值給指標
如 p=&box::volume 是錯誤的
2.呼叫指向成員函式的指標時,要通過(物件名.*指標),而不是(類名.*指標)
c 指向物件成員的指標
在c 中類是抽象的,沒有實際記憶體,而物件是具體,是占有記憶體的,因此物件有位址,存放物件的起始位址的指標變數就是指向物件的指標變數。物件中的成員也是占有記憶體的,所以,存放物件成員的起始位址的指標變數就是指向物件成員的指標變數。1.指向物件資料成員的指標 int p1 定義指向整形資料的變數 p1...
指向成員函式的指標
指向成員函式的指標 取乙個非靜態成員函式的位址,如果該函式是nonvirtual,則得到的結果是它在記憶體中真正的位址。然而這個值也不是完全的,它也需要被繫結於某個class object的位址上,才能夠通過它呼叫該函式。所有的非靜態成員函式都需要物件的位址 以引數this指出 乙個指向成員函式的指...
指向成員函式的指標
c 中,成員指標是最為複雜的語法結構。但在事件驅動和多執行緒應用中被廣泛用於呼叫回叫函式。在多執行緒應用中,每個執行緒都通過指向成員函式的指標來呼叫該函式。在這樣的應用中,如果不用成員指標,程式設計是非常困難的。剛遇到這種語法時也許會讓你止步不前。但你會發現,使用恰當的型別定義之後,複雜的語法是可以...