天天看點

c/c++程式設計筆記:普通函數指針&&成員函數指針

一、普通函數指針

通常我們所說的函數指針指的是指向一般普通函數的指針。和其他指針一樣,函數指針指向某種特定類型,所有被同一指針運用的函數必須具有相同的形參類型和傳回類型。

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++程式設計的視訊教程,有興趣或者正在學習的小夥伴一定要去看一看哦!會對你有幫助的~

分享(源碼、項目實戰視訊、項目筆記,基礎入門教程)

免費學習:

c/c++程式設計筆記:普通函數指針&&成員函數指針

   免費學習:

c/c++程式設計筆記:普通函數指針&&成員函數指針