Fungsi Pointer ke Static Class Member Function

2008 | Direktorat Pembinaan SMK 467 void A::WriteStringchar String { printfA::WriteString : s,String; } class B { private : public : void Funcvoid Writerchar str; }; void B::Funcvoid Writerchar str { Writerclass B writing \hello...\; } int mainvoid { A a = new A; B b = new B; b‐Funca‐WriteString; delete a; delete b; } Namun terkadang yang menjadi masalah adalah, sebuah member function yang berjenis static, tidak memiliki akses ke member dari class, sebagai contoh bila kita rubah class A menjadi : class A { private : int privatenumber; public : static void WriteStringchar String; }; void A::WriteStringchar String { printfA::privatenumber = d,privatenumber; printfA::WriteString : s,String; } 468 Direktorat Pembinaan SMK | 2008 maka compiler menyatakan error, bahwa fungsi static tidak dapat mengakses member dari class A. Namun bila kita rubah fungsi WriteString menjadi non-static dengan menghapus keyword static maka fungsi WriteString tidak dapat di pass melalui argument ke B::func karena function pointer tidak boleh menunjuk fungsi yang merupakan member class

13.10. Fungsi Pointer pada Class anggota Fungsi Non-static

Salah satu cara agar kita dapat membuat function pointer yang menunjuk ke non-static class member function bekerja adalah dengan cara memberikan object dari class yang membernya ingin diakses. Pada masalah sebelumnya A::WriteString memerlukan akses ke private member dari A yaitu mengakses int A::Privatenumber, maka solusinya kita pass object dari class A ke argumen dari A::WriteString kode yang sebelumnya dirubah menjadi : class A { private : int privatenumber; public : static void WriteStringchar String,A Self; }; void A::WriteStringchar String,A Self { printfA::privatenumber = d\n,Self‐privatenumber; printfA::WriteString : s,String; } class B { private : public : void Funcvoid Writerchar str,A Self,A NeedToPass; }; void B::Funcvoid Writerchar str,A Self,A NeedToPass { Writerclass B writing \hello...\,NeedToPass; } int mainvoid { 2008 | Direktorat Pembinaan SMK 469 A a = new A; B b = new B; b‐Funca‐WriteString,a; delete a; delete b; } Terdapat cara lain menggunakan member function pointer selain dengan cara di atas. Beberapa hal yang harus diperhatikan adalah:  Deklarasi Member function harus dengan menggunakan operator ::  Member function pointer memerlukan objek atau pointer ke objek supaya dapat digunakan.  Memanggil member function pointer menggunakan operator . atau - , tergantung apakah digunakan dengan objek atau reference atau dengan pointer. Yang menjadi masalah di sini adalah kedua operator tersebut memiliki prioritas yang lebih rendah daripada operator aplikasi fungsi, sehingga anda akan selalu memerlukan tanda kurung untuk menggunakan member function pointer.  Assignment ke member function pointer harus selalu menggunakan operator . Hal ini berbeda dengan function pinter biasa dimana operator adalah optional. Beberapa kompiler akan menerima konstruk assignment tanpa operator , tapi itu tidak standard. Kompiler yang sesuai dengan standard C++98 akan mereject assignment member function pointer tanpa operator . untuk lebih jelasnya anda dapat melihat contoh program di bawah: include iostream using std::cout; using std::endl; class SomeMumboJumboClass{ int i; public: void a_method; SomeMumboJumboClassint p:ip{} }; void SomeMumboJumboClass::a_method{