一、普通函數指針
通常我們所說的函數指針指的是指向一般普通函數的指針。和其他指針一樣,函數指針指向某種特定類型,所有被同一指針運用的函數必須具有相同的形參類型和傳回類型。
int (*pf)(int, int); // 聲明函數指針
這裡,pf指向的函數類型是int (int, int),即函數的參數是兩個int型,傳回值也是int型。
二、成員函數指針
成員函數指針是指可以指向類的非靜态成員函數的指針。類的靜态成員不屬于任何對象,是以無須特殊的指向靜态成員的指針,指向靜态成員的指針與普通指針沒有什麼差別。
與普通函數指針不同的是,成員函數指針不僅要指定目标函數的形參清單和傳回類型,還必須指出成員函數所屬的類。
是以,我們必須在*之前添加classname::以表示目前定義的指針指向classname的成員函數:
int (A::*pf)(int, int); // 聲明一個成員函數指針
同理,這裡A::*pf兩端的括号也是必不可少的,如果沒有這對括号,則pf是一個傳回A類資料成員(int型)指針的函數。
注意:和普通函數指針不同的是,在成員函數和指向該成員的指針之間不存在自動轉換規則。
pf = &A::add; // 正确:必須顯式地使用取址運算符(&)
pf = A::add; // 錯誤
當我們初始化一個成員函數指針時,其指向了類的某個成員函數,但并沒有指定該成員所屬的對象——直到使用成員函數指針時,才提供成員所屬的對象。
另外,我們需要留意函數指針的使用方法:對于普通函數指針,是這樣使用(*pf)(arguments),因為要調用函數,必須先解引用函數指針,而函數調用運算符()的優先級較高,是以(*pf)的括号必不可少;
對于成員函數指針,唯一的不同是需要在某一對象上調用函數,是以隻需要加上成員通路符即可。
自學C/C++程式設計難度很大,如果你想更快提升自己的程式設計能力和編寫項目的水準,歡迎一起共同成長!
UP在首頁上傳了一些學習C/C++程式設計的視訊教程,有興趣或者正在學習的小夥伴一定要去看一看哦!會對你有幫助的~
分享(源碼、項目實戰視訊、項目筆記,基礎入門教程)
免費學習:
免費學習: