1. 程式人生 > >C++教程:指向成員函式的指標

C++教程:指向成員函式的指標

成員函式指標是C++最少用到的語法之一,甚至有經驗的C++碼農有時候也會被它搞暈。這是一篇針對於初學者的教程,同時也給有經驗的碼農分享了一些我個人對底層機制的挖掘。在開始之前,讓我們先看一段在第一次看時一定會高呼“我++”的程式碼(說明,這些程式碼都是翻譯君重新手敲的,改正了原文程式碼中的一些不太好的空格、縮排,下同):

//mem_fun1.cpp#include<iostream>classFoo{public:Foo(int i =0){ _i = i;}void f(){
        std::cout <<"Foo::f()"<< std::endl
;}private:int _i;};int main(){Foo*p =0; p->f();}// Output:// Foo::f()

為什麼我們能通過一個空指標呼叫成員函式?看起來好像編譯器根本不鳥p的值是什麼,只介意p的型別。彆著急,咱先吊吊胃口,把答案留到後面的章節。現在,我們所能知道的是,編譯器準確地知道要呼叫哪個函式。這就是所謂的“靜態繫結”。因為成員函式可以靜態繫結(並不是總能靜態繫結,待會兒討論),所以它們的地址是在編譯階段決定的(同樣並不是永遠如此)。直觀地講,應該有一種方法可以儲存成員函式的地址。而且,真有這麼一種方法,那就是——成員函式指標。